сократил до 18 мин 1000 записей
это очень медленно для такого количества записей. Я расстраиваюсь когда у меня больше секунды на 20 миллионов записей.
первое на что смотреть - это как уже много раз говорил - select_related, prefetch_related. проще всего увидеть в дебаг тулбаре. если хочешь на проде такое отследить - поставь django_silk например, тоже показывает запросы в БД.
индексы бывают разные для разных запросов. например, если ты делаешь __contains или __icontains то обычный db_index тебя не спасет. надо смотреть EXPLAIN запрос в базе и там разбираться