Cara,
Da forma como é utilizada corriqueiramente, JPA é JDBC Puro. Com uma camadinha de “tradução” no meio… Mas no final das contas, é JDBC.
Quanto às questões de performance, eu afirmo peremptoriamente que ninguém nesse mundo está habilitado à responder à sua pergunta enquanto ela estiver despida de um contexto. Se o nosso contexto for um simples: “select * from algumaCoisa”, JPA é menos performático do que JDBC Puro, visto que ela “extende” JDBC, inserindo umas complicaçõeszinhas… Por outro lado, se o seu contexto incluir diversos “select * from algumaCoisa”, e o objeto resultante da consulta agregar alguns outros objetos… Ai, se bem usado, JPA vai se tornar mais performático…
Também não é uma verdade universal que o desenvolvimento sobre JPA é mais produtivo que sobre JDBC… Talvez alguns desenvolvedores dominem muito bem JPA e se tornem bastante produtivos. (Mas para ser honesto o que eu tenho visto por aí é muito erro… Aninhamentos de agregações que não terminam nunca, problemas com transações, etc, etc, etc).
O meu conselho normalmente é: Tente isolar completamente a camada de persistência através do uso de alguns padrões de projeto. (Repository, QueryObject…), escolha a tecnologia que vc e sua equipe se sentem mais à vontade, e toque o pau… Se no futuro vc resolver mudar de idéia, não vai dar muito trabalho.
Enfim, o importante é um design do projeto que estabeleça bem claramente as responsbilidades… E aí (apesar de não ser ponto pacífico), acho que as práticas do DDD podem te ajudar bastante (e os principais livros de patterns).
Abraço