Vladimir sent me a log file (I do so love reading \tracingall
output:-) to see why my example preserved kerning but his lost it.
it turns out to be a `feature' of inputenc.sty, so perhaps this
is the wrong mailing list after all, but it does not seem worth moving
this to latexbugs@.. now.

\MakeUppercase works by making some local definitions, then putting
its argument in an \edef (with \uppercase), then executing the token
just defined.

However \tracingall reveals that the definition of the edefed token in
this case is:

\reserved@a ->
              \uppercase {\protect \IeC {\CYRG }\protect \IeC {\CYRD }}

\IeC is harmless, \CYRG and \CYRD are the required uppercase letters,
      ...\protect is \relax which breaks the inter-letter kerns.

so I think that the definition in inputenc should be

%    \protect\IeC

but I'd need to think about it more before changing the distribution.