To use a dictionary, the key needs to support equality operations. For example:
public class ICD_Map2 : IEquatable<ICD_Map2>
{
    public ICD_Map2(string callType, string destination) {
        CallType = callType;
        Destination = destination;
    }
    public override int GetHashCode() {
        int result = 17;
        result = -13 * result +
            (CallType == null ? 0 : CallType.GetHashCode());
        result = -13 * result +
            (Destination == null ? 0 : Destination.GetHashCode());
        return result;
    }
    public override bool Equals(object other) {
        return Equals(other as ICD_Map2);
    }
    public bool Equals(ICD_Map2 other) {
        if(other == null) return false;
        if(other == this) return true;
        return CallType == other.CallType && Destination == other.Destination;
    }
    public string CallType {get; private set; }
    public string Destination{get; private set;} 
}
Note making it read-only is intentional: mutable keys are going to cause huge problems - avoid that.
Now you can use this as a key, for example:
var key = new ICD_Map2("Mobile SMS", "Australia");
string result;
if(maps.TryGetValue(key, out result)) {
    Console.WriteLine("found: " + result);
}
The reverse lookup is problematic, and cannot be optimised unless you have a second dictionary. A simple operation (performance O(n)) would be:
string result = "International Text";
var key = (from pair in maps
           where pair.Value == result
           select pair.Key).FirstOrDefault();
if(key != null) {
    Console.WriteLine("found: " + key);
}
Putting it all together:
static void Main()
{
    Dictionary<ICD_Map2, string> maps = new Dictionary<ICD_Map2, string> {
        {new ICD_Map2 ("Mobile SMS", "Australia"),"Local Text"},
        {new ICD_Map2 ("Mobile SMS", "International"),"International Text"}
    };
    // try forwards lookup
    var key = new ICD_Map2("Mobile SMS", "Australia");
    string result;
    if (maps.TryGetValue(key, out result))
    {
        Console.WriteLine("found: " + result);
    }
    // try reverse lookup (less efficient)
    result = "International Text";
    key = (from pair in maps
               where pair.Value == result
               select pair.Key).FirstOrDefault();
    if (key != null)
    {
        Console.WriteLine("found: " + key);
    }
}