Ответ на вопрос «как хранить» зависит от того, какие данные вы будете запрашивать. То есть — от представлений данных, с которыми работает ваша программа (программы). Именно на основе этих представлений синтезируется полная модель данных, хранящаяся в БД.
В свое время, лет 25 назад, был (может, и сейчас есть) стандартизированный подход, называвшийся IDEF1 (это имя из стандарта) или Entity-RelationShip (это название процедуры), позволявший формальным образом синтезировать из этих, частных, представлений полную модель данных. И были программы, которые позволяли это делать. Я одной такой пользовался, ERwin называлась (AFAIK она жива и сейчас), но, в принципе, нужные процедуры можно выполнять и вручную. Описание процедуры на русском есть, как минимум одно, которое я знаю — в старой книге «Мартин Дж. Организация баз данных в вычислительных...»
Короче, синтез модели ваших данных — это ваша задача, связанная со специфическими вашими задачами.
Судя по информации из вашего вопроса, я могу только сказать, что:
1. этот вариант вам явно не походит: данные из представления «Товары в корзине» включают товары из всех категорий, так что отдельные таблицы для каждой категории — это костыль: ходить можно, а бежать — уже нет.
2. В ItemOptions можно хранить данные для всех категорий — достаточно указать в каждой записи дополнительно к идентификатору товара идентификатор категории и идентификатор свойства. Потребуются ещё таблица категорий (идентификатор категории как первичный ключ плюс дополнительная информации) и таблица свойств для каждой из категорий (идентификатор свойства как первичный ключ, идентификатор категории — внешний, плюс дополнительная информация). Схема получается не очень уклюжая, но для работы в рамках реляционной модели более-менее годная (я когда-то такую и делал и с ней работал, но это было жутко давно). Насколько для вас такая схема пригодна — зависит от ваших моделей представлений: например, будете ли вы в Корзине указывать дополнительную информацию из ItemOptions.
3. NoSQL — это название больше коммерческое, а не техническое: оно включает много разных технологий хранения в БД, единственным общим признаком которых является, что они — не реляционные. Под эту задачу мне видится годным вариант навигационной БД (это где каждая запись содержит физические ссылки на связанные с ней записи): сетевая, например. В настоящее время такие БД иногда ещё проходят под псевдонимом «графовая». Но, опять же, смотрите на нужные вам представления, в данном случае — обращайте внимание на пути доступа к данным (эти самые ссылки): навигационные БД в этом плане не так гибки, как реляционные, и отсутствие нужных ссылок может заставить ходить по кривым путям и убить тем самым производительность.
Но это все теория, а что там сейчас на практике творится — я с уверенностью сказать не могу. Насколько я понимаю, там надо смотреь возможности конкретной СУБД — тем более, что производители часто называют их словом «гибридная», и надо понимать, что в этот гибрид попадает.