By making the suggestion to have the "work" being done be more "useful", you have essentially shown that you haven't taken the time to read and learn about *what* is actually being done by the mining rigs.
The problem is that the "work" is actually calculating the hashes in order to find a block, above a certain difficulty, that can be added to the block chain. In order to plug into another parallel computing project, you'd have to find a way to make it still add to the Bitcoin block chain in order to continue to verify the transactions in those blocks.
That would most likely require the parallel computing project to work with the Bitcoin project and divvy up the work for the project so that we solve a block for them, they solve a block for us.
Unfortunately, they're probably not going to cooperate, and it would mess with the Bitcoin economy, because now you're artificially changing the time it takes to find blocks. Not to mention all of the work it will take to make the protocols and "work units" interoperable.
It's just not practical. Mining takes resources, because it's supposed to take resources. Mining isn't supposed to be "free".
Your thinking inside the box still. Yes I Haven't reviewed the source code but I will soon. I'm new to programming and bitcoin is not the first project that has made me want to learn how to code.
BOINC already has a credit system in place. It shouldn't be too hard to apply some built in limiting scheme to make the credits level off over time.
The same concept applies, instead of a block chain you have a "solution chain". Yes I know each solution would have to be in some kind of hash form to fit in a merkle tree. Maybe not, the solution chain would just be large and would have to be trimmed frequently compared to the merkle tree configuration of bitcoin.