You may be able to increase the size of the data block returned by the SD card when you issue a SINGLE_BLOCK_READ command (CMD17). This is done with CMD16 and the maximum/minimum block size allowed depends on the SD version as well as if you're using an SDSC, SDHC or SDXC card. From what I remember, later versions of SDSC cards support a block length of 1024 bytes and I think SDHC and SDXC support up to 4096 bytes block length (verify!). You will have to read the SD specs for more details.
Even if you change the block length though, you will have to account for this in your FAT driver, assuming the card is FAT-formatted. The BYTES_PER_SEC field of the Boot Parameter Block is usually set to 512 bytes by most SD formatters for maximum compability with most card readers. This means a single block read == a single FAT sector, for most readers. If you increase yours to, say, 1024 though, it means a single block read == 2 FAT sectors, assuming the FAT system uses 512-byte sectors and you arent formatting the cards to your specific needs. This means if you want to read/modify a single sector, you have to clock out 2 sectors--inefficient. However, you could format the card and change BYTES_PER_SEC to match the 1024-byte block length of the card (this depends on the FAT type), though you will have to be careful to ensure any affected fields are similarly adjusted.
Increasing the block length also means increasing the size of the buffer you use to store blocks you've read. In general, its a lot safer to increase the block length and account for this in your code than it is to modify the FAT fields and risk rendering the card unreadable on some card readers (though Microsoft readers will always support anything within FAT specs).
As far as the optimal block size is concerned, please see this article, (MicroSD flash block size), which discusses the native write/erase block size for SD cards. Buffering by this value may improve performance and/or reduce power consumption.