Is there any way to listen to all transactions using bitcoind api? I understand that using json-rpc to listen for all transactions is a bad idea due to performance, but bitcoinj is able to do it. In reality bitcoind is parsing all transactions under the hood when it forwards them. Is there any way for bitcoind to notify me when it sees a new transaction (not paying to an address in the wallet)?

Surely its is able to notify other peers, so why not me?

One solution I am thinking of is running connecting a bitcoinj node to my bitcoind and then using that to listen to transactions.

Another solution is to just listen for blocks and lose the ability to see zero conf payments.
Yes by default newer versions of bitcoin core should have zeromq enabled by default. Check here -> https://github.com/bitcoin/bitcoin/blob/master/doc/zmq.md 

If you're using java you can use the code snippet there (using https://github.com/zeromq/jeromq ) -> How do i parse the zeroMQ messages in java?