RedSnake
Сразу бы писал, что не можешь менять структуру -)
Существует несколько решений.
Первый, которым мы пользуемся сейчас: Берём внешний индексатор полнотекстовый мощный крутой. (Может быть написан самим, как у нас почему-то получилось. МОжет быть взят многосёрч (ацкий ацтой), может быть взят http://lucene.apache.org
) выбираем данные, которые надо проидексировать (у нас, например, выбирается, имя товара, код товара, название производителя, значения свойств (интерфейсы: WiFi, firewire) и кладутся в индексатор вместе с ИД ряда. Потом делается сервис, который ищет в этом индексаторе ИД, а потом по идам уже достаёт из основной бд, которую менять нельзя, строки с найденными ИДАМИ. поиск по идам (если это первичные ключи, то поиск по ним будет быстр достаточно) быстрее чем лайки
2. Частным случаем способа один может быть использование субд с возможностью построения полнотекстовых индексов. например мускуль пойдет.
юерешь, делаешь отдельную таблицу. два поля. -- в одном сложена конкатенация всех текстовый полей, относящихся к искомой строке, во втором -- ид. по текстовому полю строишь индекс полнотекствоый. и все. получается, что всё жжот.