I use a similar method; the "algorithm" is different of course, but I too use a unique password for every account I have anywhere, which I calculate in a similar fashion.
My algorithm is a bit simpler than the one you described though, I can figure out a password I don't remember in just a few seconds. That also makes it less secure of course, I just think its sufficiently secure.
Example: let's say that I need a password for hacker news.
- Let's say that I like dolphins, so my chosen token will be Dol
- I decide to take the second letter from each word in my username: exa (D e usE x M a china)
- I decide to take the third letter from each word in the domain name: wom
- I then choose some punctuation to mix in the password: #&%
Now I'm ready to assemble my password: Dol#exa&wom%
If I have an account on www.yahoo.com with ginger.roger as username, the password would be Dol#io&whm%
It's long enough (but I can making it longer, if I want), uses capital letters and special characters (you can also throw in some numbers, this was just an example) and if someone looks into a database the password is not distinguishable from a random one.