You're getting close to name-value type of design.

Probably your mathod is OK for your data, even if you'd need to keep all data as strings. I don't know how you plan to keep header structure and data. If you plan to have something like
1 1 name price color
in product_headers and something like
1 1 some_name 12.5 blue
in product_data, you can have 2 problems: product_data will have a fixed number of columns. If you need to add a new type with more attributes, you'd need to modify the table. On the other hand, you'd have many NULLs when a type has less atributes.
If you'd like to have a very flexible configuration, use something like:
product: product_id, product_type
product_type: type_id, attribute_id, attribute_name (string) (one type described by many rows)
product_description: product_id, attribute_id, attribute_value (product described by many rows)
Ok, it's not a perfect impelmentation of this design, but you should get the idea.