Revolt,
I'll assume that the reason your current implementation (IRQ triggers Nios to set up the DMA transaction) isn't sufficient is because the interrupt latency is too long. If so, you could solve the problem in a different way, using Avalon flow control (formerly called "streaming").
Here's how it would work: you would give your FIFO had an additional output signal of Avalon type dataavailable. The DMA would immediately read from the FIFO whenever that signal was asserted. You could assert dataavailable on ~fifo_empty, or do something more complicated with hysteresis on the number of words in the FIFO. It would still be up to the Nios to initialize each DMA transaction, but perhaps that could be done at a less time-critical point.
Try looking up dataavailable in the Avalon bus specification for more details.
Other possible solutions:
1) Create a dual-port memory peripheral with two slaves - one is a conventional memory interface, the other is a FIFO interface. Whatever is filling your FIFO in your current implementation can just write into the onchip memory directly, through the FIFO interface.
2) Put an Avalon master interface on your FIFO component - have that master write into the onchip memory whenever it needs to.