Thing is, the index needs to be either Unique or not.... it can't be sometimes unique...
The only other way I could see it working would be to also include some kind of IDENTITY field (or some kind of counter type field) in the index, so that when you turn one from Active = True, to Active = False, then the row is still unique... seems like a hack, but it might work... unfortunately it would also mean that the field is included for ....


Ah... here you go... (and I can't believe I'm about to suggest this).
Here's how I think I might do it..
Add a counter field, non null, defaults to 0. for simplicity I'm going to call it "sequence"
expand the unique index to include the sequence field.
Then write a trigger (gads, I can't believe I'm suggesting this) that when checks to see what field is being updated, if it's the Active field and is being set to false, and if so, gets the MAX sequence for the supplier_id and Product_code in the table, adds 1 to it, then updates the row setting sequence to this new number - that will allow the inactive items to maintain their uniqueness. If the active field is being updated and set to true, set the sequence number to 0... if that should then trigger a unique index violation if one exists.

It really is a hack... and you might be able to do it w/o a trigger as well, but you then need to be uber careful with your updates, and that also assumes that people that come along afterward also play by the rules. Using the trigger will "black box" it to some extent.

-tg