Remember that Pokedex numbers carries its description as well.
For example Pokedex number of #25 is Pikachu by default.
If you want for example put Pichu as #25. Its Pokedex description will be Pikachu instead of Pichu.
You can swiftly switch these description using Hex Editor, or you can edit each of them manually via PGE which is hell.
In vanilla Firered, I believe these Pokedex description data is stored at 0x44E850, 36 bytes (36 in decimal, 24 in hex) per Pokemon,
Here some more details :
0x44E850 = Unknown Pokemon (CF C8 C5 C8 C9 D1 C8 FF 00 00 00 00 00 00 00 00 35 4C 44 08 B1 4C 44 08 00 00 00 01 00 00 00 01 00 00 00 00)
0x44E874 = Bulbasaur (#1)
0x44E898 = Ivysaur (#2)
0x44E8BC = Venusaur (#3)
And so on. (So by this explanation, Charmander should be 44E8BC+24 in HEX which the result will be 0x44E8E0)
Basically :
If you want to put Pichu as #25. First arrange the Pokedex Number first via PGE which will take some time.
Then to edit its description, go calculate the offset of #25 (Pikachu) and #172 (Pichu)
Copy the #172 (Pichu)36 bytes hexs. Delete it, then paste it to #25 offset.
If done correctly, Pichu will have #25 Pokedex number and the correct description of it.
And Pikachu will be #26 also with correct description.
Hopefully this explanation makes sense. You'll need several easy calculation and ultra focus on this.
I recommend calculate everything on an excel files first. And always take note.
Remember :
If you have expanded your Pokemon, all those datas will be imported elsewhere, not in 0x44E850 anymore.
So when you expand your Pokemon, take note on where you put those Pokemon Data when you expand your Pokemon.
Or you can check it in your expanded ROM PGE's ini.