I would implement multiple retrieves;
Reference to category + value
Type + value
Because I can imagine that you want to provide the user with feedback like this product for Type X already exists or for category X etc. When having a single retrieve with all possible options you only know that there is a duplicate for one or more of the combinations, but you don’t know which.
====EDIT with new idea====
If the full combination Product name? + type, group & category should be unique (not already exists in the database) a single retrieve will do the trick.
See my example below where I compare the reference between the product and the type, group, category. If it references the same object.
If referencing the same object, the product will be returned.
if referencing a different object, nothing is returned.
if not referencing a object, object will be returned if also not referencing a object.