Я реализовывал примерно следующее. Не знаю как у вас с нагрузкой будет, но пример довольно хорошо себя показал
products
| id | description | title | ... |
fields_product
| id | id_field ( int 255 ) | id_product ( int 255 ) | value (text) |
fields
| id | ident ( varchar 255 ) | name ( varchar 255 ) | type ( int 2 ) |
fields_option
| id | id_field ( int 255 ) | value ( varchar 255 ) | default ( int 1 ) |
В таблице fields_more хранятся данные для выпадающих списков и чекбоксов и тд.
В таблице fields описание полей. Тип поля и так далее
В таблице fields_product сама связь продуктов и полей.
Через связь многое-ко-многому, где в таблице связей кроме ключей есть поля с нужными характеристиками (например, число предметов в связке-наборе, или линк на таблицу с дополнительными характеристиками).