You might've considered this, but here goes just in case. Not knowing
more details about your requirements (like how many company names you
expect in your list), this might or might not work for you.
1. Create an index like this:
aa, list of entities that contian aa
ab, list of entities that contian ab
ac, list of entities that contian ac
....
ba, list of entities that contian ba
bb, list of entities that contian ba
2. If a user searchs for "abc", you pull the list of items that
contain "ab" and those contain "bc" and find the items that occur in
both lists. The number of lists you'll need to pull will depend on the
number of letters in the word (list n = len(word) -1) .