Я написал реализацию для .NET 3.5, где вы, например, может сделать что-то вроде:
object a = 5;
OverloadResolver.Invoke(MethodName, a);
и будет использоваться перегрузка int.
Работает с скомпилированными и кэшированными лямбда-выражениями, поэтому производительность должна быть в порядке.
Если кому-то это нужно, напишите мне, herzmeisterderwelten, который проживает на gmail.com