I do not believe unique indexes can be partially unique. In your example, you have two John's with a IsRetired = 0.
You could handle this through a Insert/Update trigger, however that starts to embed business logic into the trigger, where it probably should not be.