As with many of the other answers to this question the main problem lies in the fact that rendering so many elements in the DOM whilst doing filtering and handling key events is going to be slow.
You are not doing anything inherently wrong with regards to React that is causing the issue but like many of the issues that are performance related the UI can also take a big percentage of the blame.
If your UI is not designed with efficiency in mind even tools like React that are designed to be performant will suffer.
Filtering the result set is a great start as mentioned by @Koen
I’ve played around with the idea a bit and created an example app illustrating how I might start to tackle this kind of problem.
This is by no means production ready
code but it does illustrate the concept adequately and can be modified to be more robust, feel free to take a look at the code – I hope at the very least it gives you some ideas…;)
react-large-list-example