Which is more efficient: contradict a unique constraint or check if row exists?
You need the unique index (or constraint, I prefer indexes because of includes and filters) anyway to guarantee data integrity.

So the question is one of


do check-as-part-of-insert? OR
try insert-and-catch?


Note, checking before insert is not reliable, for at least these reasons


if someone does it manually
assumes you have a consistent code path to insert
2 concurrent IF checks can potentially both see that the row does not exist and try to insert the same value


Using INSERT...WHERE NOT EXISTS (As mentioned in comments) will use the index, so will be efficient anyway.

There is no benefit in dealing with exceptions unless you have a real need to.