I did some simple defragmenter, but it worked well only for 16MB card max (it easily fits into memory and leaves some place for intermediate buffers). Bigger cards required creation of card image on some device and then a lot of reads and writes... It was quite slow even on hdd.
The best defragmentation for MC is to:
1. Launch uLE and make psu backup of all saves on card
2. Format memory card
3. Launch uLE again and restore the psu backups.
... and you have a backup of your saves as a bonus.
And indeed, consecutive reads and writes are muuuch faster. There is a lot of additional time needed if reading at random places... If reading page by page, I can usually achieve ~450-600kB/s (depending on card manufacturer).