Тип дизайна интерфейса, который вы используете в настоящее время для поиска, лучше подходит для данных, которые обновляются редко. Например, скажем, у вас есть список из 10000 продуктов, которые обновляются раз в неделю, в этом случае кэшируйте данные локально, а затем извлекайте данные из кэша вместо базы данных для каждой набранной буквы. Таким образом, это один запрос к БД, а затем множество запросов к локальному кешу.
В вашем случае обновления данных встречаются чаще, поэтому я бы изменил интерфейс, чтобы пользователи могли вводить некоторые буквы, а затем нажимал кнопку поиска, когда они готовы получать результаты. Как отмечает JamesB, ограничение результатов также поможет, но вы по-прежнему попадаете в базу данных с большим количеством запросов. Если пользователи могут жить с некоторой задержкой данных, кэширование может быть вариантом. В базе данных много бесполезного поиска: «M», «Ma», «Mad», «Madb» и так далее ...