Вы индексируете свой словарь шесть раз во внутреннем цикле, что совершенно не нужно и, вероятно, составляет основную часть вашего времени работы. Вы можете сделать только с одной операцией индексации и без каких-либо изменений в словаре:
for i in range(0, len(numbers)):
m = numbers[i]
for j in range(i + 1, len(numbers)):
n = numbers[j]
if n != m:
k = goal - m - n
if k != m and k != n and k in myDict:
# accept triple (m, n, k)
Также, как уже предлагалось в комментариях, нет смысла сортировать входные данные.
Обновление : Также из комментариев ваш внутренний цикл начинается с 1. Это примерно удваивает ваше время выполнения.
Обновление 2 : Кроме того, учитывая, что счетчик из словаря больше не нужен, словарь теперь может быть набором (хотя и не уверен, что он повлияет на производительность каким-либо значимым образом.)
Обновление 3 : добавлена проверка для n != m
.