If you install the avahi-autoipd package, and run it with the --force-bind option in a custom init or if-up.d script, you will always get a link-local address.
You can then use iface eth0 inet manual in your interfaces(5) file, although you will need to edit /etc/network/if-up.d/avahi-autoipd to add manual to the method lines.
There is more information about avahi-autoipd[avahi-autoipd][1] on the Avahi wiki.
Personally, I would edit /etc/network/if-up.d/avahi-autoipd to with something like:
--- avahi-autoipd 2010-08-04 04:26:49.000000000 +0800 +++ avahi-autoipd.1 2010-11-11 09:57:54.000000000 +0800 @@ -13,10 +13,13 @@ esac case "$METHOD" in - static|dhcp|NetworkManager) ;; + static|dhcp|NetworkManager|linklocal) ;; *) exit 0 esac +if [ "$METHOD" == "linklocal" ]; then + /usr/sbin/avahi-autoipd --force-bind --daemonize --wait $IFACE 2> /dev/null +fi if [ -x /bin/ip ]; then # route already present? You can then list interfaces as iface eth0 inet linklocal. The edits to be made to the if-down.d script are left as an exercise to the reader. [1]: http://avahi.org/wiki/AvahiAutoipd