Вы можете сохранить желаемый список заказов в массиве
int[] iIndex = {3,2,0,4, 1};
Скажем, str содержит ваш неупорядоченный список
List<string> str = new List<string>();
str.Add("Alison.ext");
str.Add("Heather.ext");
.
.
.
Добавьте ваш список и соответствующий порядок в таблицу
DataTable dt = new DataTable();
dt.Columns.Add("Order", typeof(Int32));
dt.Columns.Add("Name");
for (int iCount =0; iCount< str.Count ; iCount ++)
{
DataRow drow1 = dt.NewRow();
drow1[0] = iIndex[iCount];
drow1[1] = str[iCount];
dt.Rows.Add(drow1);
}
dt.AcceptChanges();
Fynally Order ваш список, чтобы получить ваш ожидаемый список
var result = from ls in dt.AsEnumerable()
orderby ls.Field<int>("Order")
select ls;