Depending on the search keyword and the median length of characters in the column it is logical that it would take a long time.
Consider searching for 'cookie' in a column with median length 100 characters in a dataset of 200k rows.
Best case scenario with early outs, you would do 100 * 200k = 20m comparisons
Worst case scenario near missing on every compare, you would do (5 * 100) * 200k = 100m comparisons
Generally I would:
- reorder your query to filter out as much as possible in advance prior to string matching
- limit number of the results if you don't need all of them at once (TOP x)
- reduce the number characters in your search term
- reduce the number of search terms by filtering out terms that are likely to match a lot, or not at all (if applicable)
- cache query results if possible (however cache invalidation can get pretty tricky if you want to do it right)