A estrutura de dados correta para usar em um clone do Excel

Digamos que estou trabalhando em um clone do Excel em C #. Minha grade é representada da seguinte forma:

private struct CellValue
{
    private int column;
    private int row;
    private string text;
}
private List<CellValue> cellValues = new List<CellValue>();

Cada vez que o usuário adiciona um texto, apenas o empacoto como CellValue e o adiciono ao cellValues. Dado um tipo CellValue, posso determinar sua linha e coluna em O (1), o que é ótimo. No entanto, dada uma coluna e uma linha, preciso percorrer todo o cellValues para descobrir qual texto está nessa coluna e linha, o que é terrivelmente lento. Além disso, dado um texto, eu também preciso percorrer a coisa toda. Existe alguma estrutura de dados em que eu possa realizar todas as 3 tarefas em O (1) tim

Atualizado: Examinando algumas das respostas, acho que não encontrei uma que eu goste. Eu posso

Não mantenha mais de 2 cópias do CellValue, para evitar sincronizá-las. No mundo C, eu teria feito bom uso de ponteiroinhas e colunas podem ser adicionadas dinamicamente (diferente do Excel

questionAnswers(9)

yourAnswerToTheQuestion