Моё виденье.
Структуру можно сделать двух типов
1. Всё в одну модель, кроме списков(списки через связи
ForeignKey/
ManyToManyField/
OneToOneField подгружать из других моделей или
choices, они задаются администратором сайта и всегда статичны). Пускай даже будет 40 полей у модели.
2. Одна базовая, где общие данные. И куча типовых, относящихся связями к базовой модели, но имеющие свои уникальные поля. Списки так же как и в первом варианте, выносил в отдельные модели или
choices.
Я бы выбрал второй вариант.
Поиск. Тут два варианта.
1.
Сфинск или другие независимые поисковые программы
работающие с джангой (Solr, Elasticsearch, Whoosh, Xapian).
2. Делать самой джангой и воевать за логику и ресурсы. То есть весь поиск прописывать руками, всю логику возможных вариантов.
Но я бы выбрал первый вариант, слишком много будет условий и по сути написание велосипеда. А второй вариант подходит под более "простой" тип поиска.