I had a thought while looking over the powergoals and the like. Since names are currently completely random, and while sometimes awesome are also quite silly... I thought of some improvements to the RNG system.
If someone does something that gives them a nickname, for instance - like learning to handle a sword really well - the RNG would pick a name like "Sword" or "blade" or something else that's listed as being related to swordsmanship, for either the first or second compound. Then a larger list of secondarily related words would be randomly chosen for the other compound, or the "the" or "of" options, etc. For our example, who I'll say at this point is named "Sword_____", it could put the second word as "point", "cut", "skilled"...
So he could end up as Swordpoint, swordcut, swordskilled, skilledsword, skill of swords, etc - because these words are related to the activity that gives him a nickname. The only downside is that you'd probably have to end up spending a long time linking all these words to certain actions, but some awesome and good-sounding names result.
In case I wasn't clear, here's another example.
The RNG decides a dwarf needs a new name after he's killed five sentient people. It chooses a word related to death, killing, murder, etc - "killer", "death", "murderer", "slayer", "slew", "killed", etc. That word becomes the first or second compound. Let's say it chose "murderer" and the second compound. So our guy's name is at this step in the process:
"_____murderer"
The RNG now needs a front compound. _From the word "murderer"_, it chooses other words that are listed in the linguicon as _related to that word_. For "murderer", it could be "people", "animal", "person", "axe", "insertwhateverweaponyoufavorhere", "gruesome", etc.
Let's say it takes "sword", for instance.
So we now have a dwarf nicknamed:
"Swordmurderer"
Sounds much cooler than "fortress of doors" for a killer.