Concept for saving context information
The general approach seems reasonable to me, thought I believe it means you have to very careful around anything that can switch threads, like TPL or async-await.



public static ContextIdentity LocalIdentity;


Why is this public? From your description, it seems to me that users should never read this.

If this is so that users can set this, maybe a setter on Current would make more sense.

Also, you should use properties instead of public fields.



return Thread.CurrentPrincipal.Identity as ContextIdentity;


You already know that Indentity is ContextIdentity, so you should use a cast, not as. That way, if you make a mistake, you're going to get an exception, not null.



_name = "Default";


Why is _name a field, not a property like the others? If you don't want users changing the name, you can make the setter private.



"True".Equals(ConfigurationManager.AppSettings["DatabaseIntegratedSecurity"])


This is not Java, you can use == "True".