Primeiro um pouco mais de chamas, depois uma solução real ...
Eu concordo principalmente com as chamas já jogadas em você.
Não concordo com a normalização de valores-chave. As consultas acabam sendo horríveis; desempenho ainda pior.
Uma maneira 'simples' de evitar o problema imediato (limitação do número de colunas) é 'particionar verticalmente' os dados. Tenha, digamos, 5 tabelas com 400 colunas cada. Todos eles teriam a mesma chave primária, exceto que um pode ser AUTO_INCREMENT.
Talvez o melhor seja decidir sobre a dúzia de campos mais importantes e colocá-los na tabela 'principal'. Em seguida, agrupe os sensores de alguma maneira lógica e coloque-os em várias tabelas paralelas. Com o agrupamento adequado, talvez você não precise ingressar em todas as tabelas o tempo todo.
Você está indexando algum dos valores? Você precisa pesquisar neles? Provavelmente você procura em data e hora?
Se você precisar indexar muitas colunas - punt.
Se você precisar indexar alguns, coloque-os na tabela principal.
Aqui está a solução real (se aplicável) ...
Se você não precisa da vasta gama de sensores indexados, não crie colunas! Sim, você me ouviu. Em vez disso, colete-os no JSON, compacte-o, armazene-o em um campo BLOB. Você economizará muito espaço; você terá apenas uma tabela, sem problemas de limite de coluna; etc. Seu aplicativo será descompactado e, em seguida, usará o JSON como uma estrutura. Adivinha? Você pode ter estrutura - você pode agrupar os sensores em matrizes, itens de vários níveis, etc., exatamente como o seu aplicativo gostaria. Outro 'recurso' - é aberto. Se você adicionar mais sensores, não precisará ALTERAR a tabela. JSON se flexível dessa maneira.
(A compactação é opcional; se o seu conjunto de dados for grande, ele ajudará no espaço em disco e, portanto, no desempenho geral.)