Writing to FSMC is extremely slow
How are you transferring the data into the FSMC address space?  Are you manually copying it from RAM?  Constructing it on the fly and writing it to the address space?

To transfer it in the minimum possible time and without CPU intervention, I would:


Reserve the 48kB of RAM necessary to store a complete LCD frame (a "frame buffer").
Use DMA in a continuous loop to transfer the frame buffer into the FSMC address space.
Manually update the contents of the frame buffer as needed; DMA/CPU contention will sort itself out.


The biggest problem with this approach is that you may not have 48kB of RAM spare, given that the STM32F1 has at most 64kB of RAM.