What's the most efficient way to perform a case insensitive search for a word in a text field?
In PostgreSQL, you can use Text Search:

create index on foo_table using gin ( to_tsvector('simple', body) );

select 
*
from foo_table
where
  to_tsvector('simple', body) @@ plainto_tsquery('simple', 'word');