кстати, я выше, вероятно, был не прав относительно того, что и неоптимальные запросы норм - у тебя ведь этот запрос выполняется после нажатия кнопки в строке поиска? человек ввёл 2 буквы и ждёт... то есть это не те запросы, которые в фоне service worker'ом заполняют хранилище... [когда я говорю "да оно не важно", я обычно именно такой сценарий использования API подразумеваю]
Elasticsearch тут именно по этой причине был бы лучше) но даже если по-прежнему говорить про Django ORM, то всё равно, лучше вместо сложного запроса сделать 1 простой запрос к заранее заготовленной View (они добавляются как обычные модели с managed = False в Meta)