Yes, you can just use two generic parameters:
public static TRet ConvertToHexString<TVal, TRet>( this TVal _input ) {
However, if you're inspecting the type of the input value as you are in that case statement, you're pretty much defeating the purpose of using generics and are probably better off using specific types:
public static TRet ConvertToHexString<TRet>( this string _input ) {
public static TRet ConvertToHexString<TRet>( this byte[] _input ) {
etc.