How big is your data set and how big will it get? If it's a few thousand rows, no big deal, if it's a few million, big deal.
I throw queries like this:select lname, fname, ext, dept, dept_no, ms, pname, lvname, phonebook.OID, number, pos, enum from phonebook left join lev2_1 on (phonebook.lvcode=lev2_1.lvcode) left join phonebook_keywords on (enum=phonebook_keywords._enum) where (lower(lname) like '%apache%' or lower(prev_lname) like '%apache%' or lower(fname) like '%apache%' or lower(ext) like '%apache%' or lower(dept) like '%apache%' or lower(dept_no) like '%apache%' or lower(pname) like '%apache%' or lower(ms) like '%apache%' or lower(number) like '%apache%' or lower(pos) like '%apache%' or lower(lev2_1.lvname) like '%apache%' or lower(phonebook_keywords.keywords) like '%apache%')and (lower(lname) like '%php%' or lower(prev_lname) like '%php%' or lower(fname) like '%php%' or lower(ext) like '%php%' or lower(dept) like '%php%' or lower(dept_no) like '%php%' or lower(pname) like '%php%' or lower(ms) like '%php%' or lower(number) like '%php%' or lower(pos) like '%php%' or lower(lev2_1.lvname) like '%php%' or lower(phonebook_keywords.keywords) like '%php%')and (lower(lname) like '%sql%' or lower(prev_lname) like '%sql%' or lower(fname) like '%sql%' or lower(ext) like '%sql%' or lower(dept) like '%sql%' or lower(dept_no) like '%sql%' or lower(pname) like '%sql%' or lower(ms) like '%sql%' or lower(number) like '%sql%' or lower(pos) like '%sql%' or lower(lev2_1.lvname) like '%sql%' or lower(phonebook_keywords.keywords) like '%sql%') order by lower(lname), lower (pname), lower(fname), lower(dept);
at the company phonebook all day, with about 2,000 people in it, and it takes about 1/10th of a second to run each time.
If you're gonna brute force it, and sometimes it's the only answer because indexing results in such a restricted way of searching, just make sure you've got LOTS of shared memory configured for your database to use, and it WILL help.