J'étais partis sur une idée du genre bouton Up/Down pour monter/descendre l'item 
L'idée générale pourrait correspondre, après adaptation :
En gros (pour le Up/Down) :
private void MoveItemUp(ListView lv, ListViewItem item)
{
if ( item.Index == 0 )
{
return;
}
int newIndex = item.Index-1;
item.Remove();
lv.Items.Insert(newIndex, item);
}
private void MoveItemDown(ListView lv, ListViewItem item)
{
if ( item.Index == lv.Items.Count-1 )
{
return;
}
int newIndex = item.Index+1;
item.Remove();
lv.Items.Insert(newIndex, item);
}
L'idée générale est peut être adaptable à ton problème, il suffirait de supprimer tes items (Remove) puis de les insérer en index 0, ce qui pourrait économiser le traitement de l'intégralité des items.
A toi de voir si le jeu en vaut la chandelle.
/*
coq
MVP Visual C#
*/