Вы можете использовать регулярное выражение для сопоставления символов, которые хотите преобразовать, и лямбда-выражение для создания шестнадцатеричного кода:
string input = @"+&(). -*<>/\|";
string encoded = Regex.Replace(
HttpUtility.UrlEncode(input),
@"[()\.\-*]",
m => "%" + Convert.ToString((int)m.Captures[0].Value[0], 16)
);