Если вы хотите вернуть значения из обеих записей в таблицу спецификаций, то это нельзя упростить, так как в таблице спецификаций требуются два поиска
Однако в вашем примере вы можете переписать его следующим образом:
SELECT products.* FROM products
WHERE products.language = "de"
AND products.category = "ABC"
AND (SELECT COUNT(*) FROM specifications WHERE
(specifications.name = 'Innenabmessungen' AND specifications.value = '182x53' AND specifications.product_id = product.id) OR
(specifications.name = 'Farbe' AND specifications.value = 'schwarz' AND specifications.product_id = product.id)
) = 2
Хотя я не думаю, что будет повышение производительности, если вы сначала не выполнили поиск в таблице спецификаций, чтобы найти строки с соответствующим product_id, а затем искали имена / значения
Очевидно, что вам нужно будет проиндексировать поля product_id, name и value в таблице спецификаций, а также поля productid, language и category в таблице products.