You can't really do that. Roles.AddUserToRole() is really a way to add a role in the provider store, not just temporarily for the request.
What you should be able to do, however, is the following.
Handle the Application_AuthenticateRequest in global.asax, and then create a new GenericPrincipal object based on the current user to which you add the staff role, using code something like this:
void
Application_AuthenticateRequest( object sender, EventArgs e )
{
if (User.Identity.IsAuthenticated)
{
System.Collections.Generic.List<string> roles = new System.Collections.Generic.List<string>();
roles.AddRange(Roles.GetRolesForUser());
roles.Add("staff");
System.Security.Principal.GenericPrincipal p = new System.Security.Principal.GenericPrincipal(User.Identity, roles.ToArray());
Context.User = p;
}
}
I haven't had time to test this, but it should work fine.