записей в таблице products очень много ( около 1млн )
это не много, это нормально
и запросы типа JOIN не предлагать, так как оно существенно влияет на производительность
а этот бред вы как догадались сюда приплести? У вас наоборот с выходом из внутренних джоинов выборка по ид будет сокращаться, в итоге по таблице продуктс будет только джоин нужных ид(что аналогично выборке where in, только с меньшими ограничениями, например ордер и лимит). По этому сджойнте мелкие таблицы, получите с них модел_ид, и по нему уже джоин продкут.
Я бы денормализовал продуктс, внес бы еще брэнд_ид в него, но это так, мелочи.