SELECT *
FROM C
WHERE EXISTS(SELECT *
FROM B b1
INNER JOIN B b2 ON b1.product_id = b2.product_id
WHERE b1.category_id = 2
AND b2.category_id = 4
AND b1.product_id = C.id)
select C.*
from A
inner join B on B.category_id = A.id
inner join C on B.product_id = C.id
where A.id = 2
intersect
select C.*
from A
inner join B on B.category_id = A.id
inner join C on B.product_id = C.id
where A.id = 4