A parte do mais rápido é contestável.
Depende do sistema de arquivos do servidor e de como o banco de dados foi montado.
Já tive problemas de performance nos 2 casos.
Atualmente uso no SGBD, mas em uma tabela separada com relacionamento. Apenas removi a imagem da tabela principal. Assim eu só trabalho com ela quando quero trabalhar com ela, melhorando minha performance geral (apesar do relacionamento adicional).
O maior problema que vejo de colocar as imagens no SGBD é que, por exemplo, Oracle ou SQL Server, as versões gratuitas têm limite de 4GB e, bem, quando se armazena imagens no BD, esses 4GB somem rapidinho ^^
Mas como você está com PostgreSQL, acho que deve ir numa boa.
Faça pelo armazenamento no BD. É mais fácil de trabalhar.
Você vai ter no retorno do select um tipo byte[] e pode jogar direto nos construtores de imagem do Java, enquanto que no outro vai ter que ler do disco e este processo é um pouco mais chato…
Lembre-se que BLOB tem limite de tamanho.
Isso influi MUITO em performance e em economia de espaço.
Não sei como o PG funciona com os diversos tipos de BLOB, mas vale a pena dar uma BOA olhada nisso antes de seguir viagem…