The key idea here is that tickets have relative priority inside a particular context. So, we can keep an ordered list of ticket id's on that context object (in our case, the milestone).
On the milestone ticket list page we add a drag target and allow resorting of tickets via that target. We save that back to the server and store it on the context object.
When displaying a milestone display by "sort order" but filter out any tickets that aren't in the display (and update the list at that time).
Tickets that have that milestone, but aren't prioritized should be displayed in a separate "unprioritized tickets" section.
I want this. Having tickets prioritized within a milestone is valuable. It allows the product owner to control what gets done first, and simplifies the ticket-choosing process for developers. Instead of scrolling through the list looking for an appealing ticket, you simply take the one at the top of the list.