Да, вы действительно можете использовать многомерные массивы или неровные массивы для хранения "2D данных".
Что касается создания структуры данных, которая не использует пространство памяти для неиспользуемых индексоввариант может заключаться в использовании словаря, в котором ключи являются кортежами из двух чисел, например так (при условии, что ваши данные являются строками):
var items = new Dictionary<(int, int), string>();
items.Add((0,1), "0-1"); //this throws an error if the key already exists
items[(2,3)] = "2-3"; //this silently replaces the value if the key already exists
Console.WriteLine(items.Keys.Contains((0,1))); //true
Console.WriteLine(items.Keys.Contains((0,2))); //false
Console.WriteLine(items[(2,3)]); //"2-3"
Конечно, вы, вероятно, хотите инкапсулировать эту функциональность в свою собственнуюкласс, но вы поняли.
Обратите внимание, однако, что этот словарный подход, вероятно, будет хуже, чем простой массив с точки зрения производительности, но вы должны экспериментировать и собирать некоторые показатели.