If you really want to I'm sure you could catch an interrupt from the GPIO and forward it to a script at just calls a halt.
Edit:
A quick look at the RPi low-level docs (http://elinux.org/RPi_Low-level_peripherals) suggests it is possible, but GPIO interrupts aren't supported by the default...