I'm sorry I missed this thread earlier because I'm fairly intimate with the RAID1 implementation in linux. I built my first RAID1 server back in 2000 when getting root and boot onto RAID1 was a non-trivial excercise and lilo was the bootloader du jour.
Anyway...
Yes, you need to install grub on both disks individually.
Remember that /dev/md0 doesn't itself have an MBR. One could argue that grub should be clever enough to install to the MBR of all drives of a RAID array, but one could also argue that since it isn't necessary to use the entirety of the drives to build an array, that it might not make sense. You should install grub to both drives of your mirror so that if your hda drive goes south, grub still exists on the second drive and you won't need to hunt down a rescue disk.
And yes, a partition that is part of a RAID1 array can be mounted outside of the array if necessary, and this is what makes boot on raid1 possible. Both partitions in a mirrored array are identical (assuming the array is clean).
When the box boots, the 512byte MBR of the BIOS-specified drive is examined, and the boot loader found there is run. In this case it will be grub stage1. Stage1 doesn't understand anything about filesystems - it does a raw block lookup for Stage1.5 to use to load Stage2. (There are several Stage1.5 files to support various filesystems - the appropriate one is installed when you install grub.) Stage1.5 understands the filesystem in use, it locates Stage2 which does the brunt of the work - determining kernel images, configurations, menus etc. Stage1.5 can recognise partitions of type 'fd' (Linux RAID Autodetect) in order to read them.
Once grub has done its stuff, it boots the kernel. Very early in the boot process, the kernel loads the md driver. The md driver scans the hard drives for partitions of type 'fd' (Linux Raid Auto). When it has built the list of such partitions it starts matching them up. It examines the persistent superblock of the partition, which contains UUID and Event Count information. Each partition in an array has the same UUID. When the md driver writes to an array it increments the Event Count. So the md driver assembles all the partitions in the array. In the event that the Event Count doesn't match the array is dirty and gets resynchronised (syncing to the partition with the highest Count).
Since the MBR isn't part of any partition per se, it never gets mirrored. It is possible to install grub to the boot sector of a partition, and one would presume that it would then get mirrored, but then you'd need to chainload that boot sector from another bootloader on the MBR (which could be grub, lilo or whatever). It's not worth the pain to do that - most people just use the MBR. (And you'd need that bootloader on the MBRs of both drives still anyway).
Remember that it is only Stage1 that isn't automatically mirrored - Stage1.5, Stage2 and all the config lives within your /boot md device. Since Stage1 only loads Stage1.5 it's basically static. Once you've installed grub on both drives then you're not going to need to touch it.
You might want to look at
http://www.linuxsa.org.au/mailing-list/2003-07/1270.html for a hint about the grub config file too - getting grub to look for kernels on both drives, with automatic fallback.
HTH.