Я полагаю, что это даст вам то, что вы хотите:
var result = data
.GroupBy(x => x.Column1)
.ToDictionary(x => x.Key, x => x
.GroupBy(y => y.Column2)
.ToDictionary(y => y.Key, y => y
.ToDictionary(z => z.Column3, z => z.Column4)));
Хотя я согласен с Иудой, что в результате его использования получится только некрасивый код.