Хранение данных в C#, как лучше?
Словари и списки для хранения в оперативной памяти, а на диск все равно нужно как-то их записывать, если БД не подходит то сериализация в JSON или XML.Как искать в словарях и под одним ключом хранить несколько значений?
Под ключом храните массив или список, а в нем уже значения, к слову форматы  JSON и XML все это поддерживают.
Есть такой класс  Lookup. Позволяет сопоставить одному ключу несколько значений.
Получить объект такого типа можно из любого IEnumerable с помощью нескольких перегруженных методов ToLookup(...).