Não se esqueça de que sua variável $ PATH no ambiente virtual! = Sua variável $ PATH global. Você pode confirmar isso com 'echo $ PATH' em seu virtualenv e também em um novo shell. Então, a menos que você queira instalar o PostgreSQL como uma instância única dentro de seu ambiente virtual (algo que não valha a pena fazer, imo), você precisará modificar a variável $ PATH dentro do virtualenv para incluir o caminho para sua instalação global (que irá resolver seu erro de falta de pg_config).
Aqui estão as etapas:
1.) Em um novo shell, digite 'which pg_config'. Isso retornará o caminho. Copie. No meu caso, o caminho era assim: /Applications/Postgres.app/Contents/Versions/9.3/bin
2.) De volta ao seu shell virtualenv, digite 'export PATH = / your-path-to-pg_config: $ PATH'
3.) Então, ainda dentro do virtualenv, 'pip install psycopg2'
Se tudo correr de acordo com o planejado, o psycopg2 será instalado no ambiente virtual, mas a instalação se referirá à sua instalação Global do PostgreSQL. No meu caso, esta instalação global foi instalada via Postgres.App, daí o caminho. Prefiro esse método de trabalho com psycopg2, pois significa que posso usar o banco de dados facilmente em qualquer virtualenv, em vez de apenas no ambiente virtual definido.
Espero que isso ajude quem chega aqui. Para o Google juice, aqui está a linguagem de erro explícita (e vaga) retornada quando você se depara com este problema:
Command python setup.py egg_info falhou com o código de erro 1