Спросите себя, какая дополнительная работа потребовалась бы для выполнения нескольких запросов ... Я не знаю, для чего вам нужны эти данные, но я предполагаю, что в какой-то момент вам нужно будет сопоставить результаты - сопоставить теги и типы к продуктам, не так ли? Если вы не делаете это с помощью объединения, вам просто нужно сделать это где-нибудь еще с помощью другого механизма.
Кроме того, ваша концепция этого игнорирует тот факт, что базы данных предназначены для сценариев объединения. Если вы выполняете три изолированных запроса, база данных не имеет возможности оптимизировать свое поведение в отношении запросов для результатов, которые вы ищете. Если вы делаете это в одном запросе с объединением, у него есть такая возможность.
Оставьте проблему создания набора результатов из ~ 2000 * 10 * 10 записей, а затем фильтрации его в базе данных, по моему мнению - это то, к чему это хорошо . :)