The halving occurs every 210,000 blocks, which is roughly equivalent to four years. Why not simply perform a miniscule adjustment on every block, which occurs roughly every 10 minutes? To be equivalent to the four-year halving, the reward amount would simply be multiplied by a cumulative constant. That constant would be the inverse of the 210000th root of 2, which is 0.99999669930458749782628258129969. The resultant value would need to be rounded down to the nearest satoshi, so that it eventually rounded down to zero.
To make the conversion as equivalent as possible, it could either be done at the midpoint between two halvings (the next one being Nov 2014), or, at the next halving (in Nov 2016), a "half of a halving", i.e., a reduction by the square root of 2 (0.70710678118654752440084436210485) could be performed.
I'm surprised that this was not implemented in the original protocol by Satoshi. It just avoids a big abrupt event that will cause chaos.