We've built a small class to concatenate the two and only compare on the sid. The format is similar to the following string:
"Domain\\User\nS-1-5-21-...........-1129"
This allows us to 'friendly' names in the database and debugger, yet all bindings are actually on the sid part of the value.
What happens when the user name changes you ask? The data is stale and stays that way :)
BTW, if you do something like this make sure you can't get the 'display name' out of the object since you don't want it to be displayed to a user as it may be stale. Instead provide a LookupUserName() routine that performs the correct resolution of the SID to an account name.
Lastly, be sure to store the SID however you do it. You don't want to store JDoe and when Jane quits and John starts a month later he has suddenly has access?