Я не уверен, что это считается хорошим ответом, но, столкнувшись с необходимостью уникального набора, поддерживающего порядок вставки, я пошел на компромисс с HashSet и List рядом. В этом случае, когда вы добавляете в набор, выполните следующее:
if(hashSet.Add(item))
orderList.Add(item);
При удалении предметов обязательно снимайте их с обоих. Таким образом, до тех пор, пока вы можете быть уверены, что ничто больше не добавит элементы в список, у вас будет уникальный набор с упорядочением вставки!