the only problem is going to be if you have a large table and are going to have a potentially large number of criteria. 5 ANDs on a big ass table and you might start hating things.
another way is a bit of a back door approach, but might be a bit easier to wrangle, and might even be more efficient:
SELECT product_id
FROM table
WHERE filter_id=9 OR filter_id=12
GROUP BY product_id
HAVING count(product_id)=2
the having clause is equal to the number of filters you are setting.
This is working fantastically well