I wanted to get the root files system running on an external USB hard drive. I took me a while but I finally figured out how to do this. Currently it is still loading the kernel from the internal flash.
Try:
bootargs=console=ttyS0,115200 mtdparts=nand_mtd:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/sda1 rootdelay=10
bootcmd=nand read.e 0x800000 0x100000 0x400000; bootm 0x800000
The rootdelay=10 is needed to give the kernel time to start the USB system. It seems to take a while because loading the MTD system is slow. You might need a longer delay. If you start off with it extra long you can see how long it takes for the console to show the USB system active and shorten it back down to what you need.
You also need to make sure your /etc/fstab is mounting the USB drive as root. See the FAQ on the wiki and do it the same as described for an SDcard except use /dev/sda1.
Mark