1) Estoy de acuerdo con la respuesta que te dieron. Se compromete la seguridad porque si te levanta el firewall para las conexiones que vienen desde heroku, cualquier código que corra en heroku tiene acceso a la base de datos (incluso por lo que estás contando, supongo que hablás de un mysql compartido).
2) No sólo no tiene sentido en términos de seguridad, sino que además te estás comprando un problema de performance en tu aplicación. La comunicación entre tu aplicación y la base de datos debería ser rápida y con poca latencia.
3) Existe Corkscrew pero necesitarías otro server para poder hacer el tunel (en Heroku no lo vas a poner hacer andar) y, de vuelta, no me parece una buena solución
4) Poniendo todos los servicios en la misma red. Por ejemplo, Heroku + AWS (Heroku corre en los datacenters de Amazon)