I see nothing to do with hash tables when reflecting a switch statement. It performs the same instructions as if would (ldloc, ldstr, call System.String_Equality), the only difference is with a switch statement a branch is generated next, with an if generates two instructions to test the result for 0.
The switch stores a temporary reference to the "text" variable in a local (in case it changes while switching) hence the ldloc.3 instead of ldloc.0. So, it appears the code generated for a switch comparison is more efficient than an if. Which is probably moot by the time the JIT optimizes it.
That was in debug mode. In release mode the code is far more optimized and using if/elseif and a switch with two case: the if/elseif is 5 instructions less than the switch. Again, probably moot once the JIT optimizes.