Sorting entries based on an a bespoke algorithm
Looks like a solid plan to do this. And to get the entry models it the same order as you're passing the IDs to your ElementCriteriaModel there's this property: fixedOrder(true).

Other suggestions could only be to do this with plugin code, but I don't think this would speed up thing noticeably.