We took a different approach in our medical application on several different levels. To begin,
every table, has a field that stored the user that created the record. So when the trigger fires, we have everything we needed as part of the new record to query the SFSUsers and get other details if necessary. We also have some client side auditing for the more complex elements. You don't want to do this application wide, but for the most important auditing implementations, we will use BO events and method overrides to capture and log very detailed changes. But like I said, this is not application wide, only in very select and precise areas.
Just as a word of caution, if you have to be somewhat careful on triggers too. If you over complicate your triggers you can really slow down update and deletion performance which as your application grows can become very noticeable and irritating to the end-user. So just make sure that things are optimized.
There are 100 ways to work through this, but since I don't know your app, I am just trying to throw out some suggestions. I would abandon the manual setting of the variable though, this can become an issue in other ways depending on how an end-user SQL Server environment is setup.
One other thought, every time a user logs, a unique session ID is created in our app. This let's us track a complete session for a user from start to finish. This is very handy for calculating many things including up-time, etc. But you could do something similar and use this session ID as part of a compound key for a table that you create that stores the UserPK by session, table, etc. Just be sure to think about mutli-user sessions and what is unique to your session. You could then store this off in a work table that is accessed by the trigger.
These are just ideas....trying to help get the juices flowing.