Váš dílčí dotaz by měl vypadat takto:
SELECT
attributes_entity.product_id
FROM
attributes_entity INNER JOIN attributes
ON attributes_entity.attribute_id=attributes.id
INNER JOIN attributes_values ON
attributes_entity.value_id=attributes_values.id
WHERE
(attributes.name="Memory" AND attributes_values.value="16GB")
OR
(attributes.name="Color" AND attributes_values.value="Gold")
GROUP BY
attributes_entity.product_id
HAVING
COUNT(DISTINCT attributes.name)=2
toto řešení používá poddotaz GROUP BY. Musíte použít OR, protože atribut nemůže být Memory a Color současně na stejném řádku, oba mohou být pravdivé, ale na různých řádcích. COUNT(DISTINCT values.name) počítá atributy čísla, které buď barva, nebo paměť, pokud je 2, pak existuje alespoň 1 řádek, kde platí první podmínka, a 1 řádek, kde platí i druhá.