В зависимости от того, насколько разные «гаджеты», мне не понравится вариант 2, будет много пустых значений, которые могут испортиться, если у вас есть столбец, обязательный для одного гаджета, но даже не используемый для другого .
Я бы выбрал вариант 3 только в том случае, если количество гаджетов меняется нечасто, поскольку для этого потребуется каждый раз изменять базу данных.
Не упомянутая опция - хранить гаджеты с дочерней таблицей, которая содержит уникальные значения гаджетов. Но это потребует значительного объема работы для возврата сведений о гаджетах или нескольких вызовов базы данных.
Если оставить вариант 1, за исключением того, что я буду использовать SQL-серверы типа XML вместо текста, вы можете использовать XQuery в своих хранимых процедурах.