Я думаю, что вы ищете HashSet http://msdn.microsoft.com/en-us/library/bb359438.aspx
Он реализован таким образом, что обеспечивает поиск O (1) (или так сказано в документации, однако я подозреваю, что это действительно амортизированный O (1), поскольку он реализован с помощью Hashtables ...) и поддерживает множество операций над множествами.
Я не уверен в его сериализованной форме, но я буду исследовать его дальше. Если вы действительно хотите сериализовать массив, вы всегда можете сделать
var mySet = new HashSet<T>(new []{ 1, 2, 3, 3, 4, 5, 4, 5 });
Serialize(mySet.ToArray());
и затем для десериализации просто создайте HashSet из сериализованного массива.