Я думаю, что вам нужен конкретный суперкласс Item (поскольку он, вероятно, будет иметь общие поля, например title, copyright_date, publisher и т. Д.) И подклассы для каждого подтипа (и дополнительные подклассы, если хотите, например, от Toy до ActionFigure с полем number_of_joints), используя наследование нескольких таблиц .
Если вы просто запрашиваете модель Item, это будет быстро, так как ORM Django не присоединится к другим таблицам (и вернет объекты Item, которые затем могут быть преобразованы в их «родной» тип, ссылаясь на item.subclassname. Аналогично, вы можете запросить каждую из моделей подкласса индивидуально с некоторой эффективностью.
Что касается возможности поиска, то если вы используете индексатор, эффективность не имеет большого значения, так как индексация происходит редко.