InternedString as alternative to regular String
Assuming each time you receive a new query you create an instance of InternedString to get/add another item from/into the dictionary, the performance benefit seems questionable:


Impact of string.Intern


a) It needs to calculate a hash of the original string to make a lookup in the pool of strings 

b) From official documentation - 


  The memory allocated for interned String objects is not likely to be
  released until the common language runtime (CLR) terminates. The
  reason is that the CLR's reference to the interned String object can
  persist after your application, or even your application domain,
  terminates.



High rate of collisions seems to be the only beneficial scenario


The equality comparison that Dictionary does for items in the bucket is the case when you implementation might win when the bucket grows huge.

But do you really have that many collisions?

P.S.

Comparing strings you're not using String.ReferenceEquals to compare references of the interned strings, but rather == operator which for (sting vs string) leads to values comparison.