>if I want case-insensitive search I simply create an index on lower(column) and use that to query
Or even pg_trgm trigram indexes, which are case-insensitive by default and support similarity search to accept typos and misspellings.