bawolff - Would you be able to point me to an example of mw.loadData?
Huji - I was inspired by Japanese Wikipedia's approach to sorting - they have a {{DEFAULTSORT:[article name in hiragana]}} on all articles. Since Cantonese pronunciation is even more predictable than Japanese, we could potentially have a template that automatically adds {{DEFAULTSORT:[article title in Jyutping]}} using a Lua lookup table of all common Chinese characters. Exceptional pronunciations should then be coded individually. The Pinyin implementation of this would be equivalent, though it would depend on the zh.wp community agreeing on sorting things by Pinyin.
In terms of storing the data, Wikidata is not a good answer. First up, the Wikidata property creators community has rejected the notion of creating separate properties for each common phonetic transcription system of CJK languages, so the retrieval of the phonetic transcriptions from Jyutping will be unnecessarily complicated. Second, Wikidata items refer to concepts, not titles. We could theoretically ask the script to go to Lexemes to fetch the phonetic transcription but that'll involve untangling the multiple Lexemes that refer to the same Chinese character. In general, the way Wikidata is structured makes it a bad fit for the problem at hand.
Liangent's formulation of the problem is more general than the one I described, because T46667 aims to allow multiple ways of sorting Chinese characters within the same interface. That will be much welcome too.