Na verdade, não tem nada a ver com o Django em si, mas com a maneira como o MySQL funciona.
Você não pode usar aliases em condições WHERE, porque a avaliação da cláusula WHERE precede a avaliação de aliases.
Você também pode:
-
Repita a cláusula:
Company.objects.raw('''SELECT *,core_location.a + core_location.b as dist FROM core_location,core_company WHERE (core_location.a + core_location.b)<10 ORDER BY dist''')
-
Faça uma subseleção:
Company.objects.raw('''SELECT * FROM ( SELECT *,core_location.a + core_location.b as dist FROM core_location,core_company ) as subselect WHERE dist<10 ORDER BY dist''')