Your observaton/assumption is not correct. That metadata is not part of the exe. ILSpy and ildasm are only able to show the original variable names because those programs read the available pdb file.
After compilation you get two files: an exe file and an pdb file. The pdb file holds metadata (like variablenames, linenumbers). If you open an exe with a tool that is capable of also reading the accompanied pdb file you get a decompiled result that more closely matches your original source file.
To verify your self you can rename the pdb file to a different extension and then open the exe in either ildasm or ilpsy.
The ildasm result is:
// Code size 56 (0x38)
.maxstack 2
.locals init (int32 V_0,
int32 V_1,
int32 V_2,
int32 V_3,
valuetype [mscorlib]System.ConsoleKeyInfo V_4)
With an pdb file present:
// Code size 56 (0x38)
.maxstack 2
.locals init ([0] int32 locA,
[1] int32 b,
[2] int32 c,
[3] int32 CS$1$0000,
[4] valuetype [mscorlib]System.ConsoleKeyInfo CS$0$0001)
You can see the difference. The localnames are read from the pdb file.
To verify if your EXE can find a pdb you can use the DUMPBIN command:
dumpbin /pdbPATH:VERBOSE ConsoleApplication1.exe
which will render output like this:
Dump of file ConsoleApplication1.exe
File Type: EXECUTABLE IMAGE
PDB file 'C:...\ConsoleApplication1.pdb' checked. (File not found)
PDB file found at 'c:...\obj\x86\Debug\ConsoleApplication1.pdb'
John Robbin (Wintellect) PDB Files: What Every Developer Must Know