Efficient dictionary search

I’m making a game that needs to search the whole dictionary for a valid word every time a letter is registered (So thousands of words). Is there an efficient way of doing this? Or my only chance is using something like “Contains” method?
Thank you in advance.

I did try to make an optimized data structure for this once, and here’s what i did:
The idea is to have a tree that groups words in nodes with each node having a character as a “key” and a list of words.
Each node guarantees that the words in its list contain the “key” character PLUS all the keys from parent nodes in order.
For example , node “A” contains all the words that have the letter A , it’s child-node “B” contains all the words that contain “AB” , so on and so forth.
This might be confusing reading it in text so i attached a picture below that might convey the concept better (this tree isn’t completely filled out , but enough to understand the concept)

As you can tell , each list in a node is just a filtered copy of it’s parent node , so basically lists should get smaller and smaller the more you go down the tree (hence the fast search).
In this case , let’s say the user typed “do” in their inputfied , what you do is go to the “d” root-node , then go to the “o” child-node , there you’ill find [dog,doctor]
If the user then adds “c” to the inputfield , no need to restart the search for the root-node again , you just take the last node (which is “o” in this case) and go into the “c” child-node , and you’ll find [doctor]
Example attached below as image

Hope this helps !

Have you considered implementing a form of Trie?