Its interesting but this part:
The client checks every transaction's unclaimed outputs to see if any of its keys decrypt the primary key or the secondary key to a private key whose corresponding public key is the one in the output.
would be brutally expensive at a certain volume of transactions.
A block only comes in every ten minutes. And you don't need as many local accounts. But let's take the worst case reasonable scenario -- you have 20 local accounts and a block comes in with 500 transaction outputs. That would require 10,000 decrypts followed by 10,000 public key to private key transformations. That would take a typical modern PC about 15 seconds, using a single core. The operation could intentionally be spread over a longer period of time to reduce the load burst.
If you think this is a problem, a simple change will solve it. Leak one byte of the public key into the primary and secondary transaction keys. That would mean you only had to check accounts whose public key matched the leaked byte. This would reduce anonymity a bit (the transaction outputs that might be going to a particular account would now be only 1/256th of all the transaction outputs), but would reduce this computation load by a factor of 256.