Это немного сложная тема. В общем случае базы данных не будут оптимизировать запрос LIKE, если он не привязан к началу. Если вы выполняете поиск по 4 столбцам, это не так.
http://www.postgresql.org/docs/8.4/static/indexes-types.html
оптимизатор может также использовать индекс B-дерево для запросов, связанных с шаблона операторы, как и ~ если шаблон является постоянная и прикрепляется к началу string - например, col LIKE 'foo%' или col ~ '^ foo', но не col LIKE '% bar'. Однако, если ваша база данных не использует языковой стандарт C, вам нужно будет создать индекс со специальным классом операторов для поддержки индексации запросов соответствия шаблону; см. раздел 11.9 ниже. Также возможно использовать индексы B-дерева для ILIKE и ~ *, но , только если шаблон начинается с неалфавитных символов, то есть символов, на которые не влияет преобразование верхнего и нижнего регистра.
Вы можете рассмотреть полный текст поддержку в PostgreSQL, если вы делаете естественные запросы языка (например, поисковой системы) ...
Или ждать für 9.1, который будет в состоянии использовать индекс для LIKE и ILIKE : http://www.depesz.com/index.php/2011/02/19/waiting-for-9-1-faster-likeilike/ –