CPT or Custom Table for Repository of Serial Numbers

then connect the product with the serial using a custom field

Why not store serial itself in custom field, instead of connection information?

You don’t describe what serial number is in detail, but I think it’s likely merely a text string. Since it’s unique (as opposed to group-related) it sounds well suited to be just stored in custom field.

In my experience I had stored much more elaborate data in meta of WooCommerce orders (SVG customizations). I hit issues eventually with allowing multiple instances of same but differently customized product in same order, but I imagine with simpler use case the complexity would be accordingly lower.