I think your problem is that the program you have is not ISO compliant.
Mixing characters in integer variables is pre F77 and I have removed this use out of most programs I have. It stays in some very old 1970's programs that I don't use frequently enough to bother.
You are right in saying that 'I would have to go hunt down all the locations to see how the variable is used'. You will have to do this !!
The best solution is to locate how these character values are used and then replace the variable with a new character variable.
Usually the character value is in part of the integer array in common and is consistently used as character. If the programmer has mixed the values as integer and character, it is more difficult, but then the extent for which they are character or integer should be for that part of the calculation that they relate.
Back in 70's the mixing of real, integer and character in the same array was to save on storage and in some cases with the final size of the required array not known (not defined explicitly in common in this case). In this case, you need a multiple pass of the data to define the problem size then use separate arrays for integer, real and character. A lot of these techniques were based on sharing memory, which is not necessary today. ALLOCATE is a more elegant solution, once the problem size is known.
The answer you don't want, and that I recommend, is go through all uses of this variable/array in your program and replace the character usage with a character variable.
A good editer/IDE can quickly find this. Even the DOS command: find /i/n 'variable' *.f95 > variable.tce : will quickly find what you need. (assuming variables don't continue over column 72!)
Also all common block definitions should be in include files (using /implicit_none).
If the COMMON definition is different in different routines, then the previous programmer has left you a challenge !!
My preferred solution is to try and replace the common by modules and replace the mixed arrays by TYPE structures, although as I've found recently some old techniques, such as use of EQUIVALENCE are difficult to emulate.
On the other hand, what you have should work, with appropriate compiler options, as it did before. But that means it will be difficult to develop this program further to make it look more like a modern program.
All you need is a quite room, away from distractions and a bit of time. Selective global replace can do a lot very quickly.
Good Luck