Put the transaction inside your stored procedure with locks on the rows. That in conjunction with a check for existing rows against the username should get the first transaction go through and the second one to fail.

I haven't fully understood the problem with the user.identity.name solution, it should still be available if in a webfarm, since you'll have Windows Authentication on. Perhaps you could use the email address @yourcompany.com, assuming everyone in the company has the same email domain.