Se você vai quebrar a estrutura de diretórios assim (e você deve), você não deve usar o método que você propõe, que estará sujeito a clustering. Você deve implementar o mesmo conceito, mas com base em um valor com hash do nome do arquivo.
Por exemplo, ao invés do que você propõe, faça um hash do nome do arquivo (eu usarei md5), então criei os subdiretórios baseados no valor do hash:
Your proposal:
FILE=1999, H1=1, H2=999, FILEPATH=1999
FILE=1998, H1=1, H2=998, FILEPATH=1898
FILE=1997, H1=1, H2=997, FILEPATH=1797
Hashed solution:
FILE=1999, MD5=2554fe5cd0a1b3fb7f9ec112fd326744, H1=2, H2=54, FILEPATH=299
FILE=1998, MD5=82ec15656dd2b8a3e50ff36643a713ad, H1=8, H2=2e, FILEPATH=8e98
FILE=1997, MD5=9cc2e1e538bd538014d294138a85e20b, H1=9, H2=cc, FILEPATH=9\cc97
A vantagem de fazer isso é que ele espalha a utilização das pastas de maneira mais uniforme, permitindo que você faça coisas como espalhar as pastas pelas unidades para obter desempenho, etc.
É provável que o seu banco de dados tenha funções hashing embutidas, o que permitiria calcular o caminho na hora, você também poderia facilmente calculá-lo uma vez no código e salvar todo o caminho.
Meu exemplo de MD5 pode não ser o padrão (acho que SHA1 é mais comum), mas foi apenas para obter um exemplo de trabalho por aí.