Не используйте API ;-) Серьезно, если ваш JOIN сложен, вы должны увидеть значительное увеличение производительности, переключившись на SQL, а не используя API. И это не значит, что вам нужно запачкать грязный SQL во всем вашем прекрасном коде Python; просто создайте собственный менеджер для обработки JOIN, а затем используйте остальной код, а не прямой SQL.
Кроме того, я был как раз на DjangoCon, где у них был семинар по высокопроизводительному Django, и одна из ключевых вещей, которые я от него убрал, заключалась в том, что если производительность - это реальная проблема (и вы когда-нибудь планируете иметь значительный трафик) вы действительно не должны делать JOINs, потому что они делают масштабирование вашего приложения практически невозможным.
Вот видео, которое Google сделал из разговора:
http://www.youtube.com/watch?v=D-4UN4MkSyI&feature=PlayList&p=D415FAF806EC47A1&index=20
Конечно, если вы знаете, что вашему приложению никогда не придется сталкиваться с такой проблемой масштабирования, ПРИСОЕДИНЯЙТЕСЬ :-) И если вы также не беспокоитесь о снижении производительности при использовании API, то вы на самом деле не нужно беспокоиться о (AFAIK) незначительной разнице в производительности между использованием одного метода API и другим.
Просто используйте:
http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships
Надеюсь, что это поможет (а если и не поможет, то надеется, что какой-нибудь настоящий хакер Django сможет подсказать и объяснить, почему метод X действительно имеет заметную разницу в производительности).