I work for as a civilian for the military. Promotions are based on performance to a degree and also time. The initial promotions are based on time and passing qualifications. To make lead engineer a manager needs to select you based on completing even more quals, experience in specific evolutions, potential, and a very unfun oral board (an intense interview to test knowledge and leadership skills). I started in 2002 and of the 40 or so engineers that were brought into our department that year, I am one of the few to make lead engineer already, it ranges from 4 to 7 years and some people will never be promoted either by choice (dont want the extra responsibility) or because they were never selected.
My brother works for an ad agency (good sized not huge), it is totally based on performance. You make money for them, you move up. They will inflate titles and pay to keep a valuable person who may be leaving but you really need to earn it to move up in real positions. If they think you will leave they will promote you if you have earned it, if not they will let you go. My bro is 30 and is already pretty high in management and is the youngest person at his level. He was promoted last year got a big raise, then 6 months later he was promoted again and another big raise which was extremely unusual, he basically doubled his salary in a year. They tend to peg people for senior management and if you are one of the very select few they do everything to keep you from leaving. Another common practice is that they also try to steal people from other agencies that are pegged as stars.
My wife works for a very large company and its based almost all on seniority, though you can apply for open positions but that still is heavily influenced by years you have been working. You can plug along and continue to move up without being anyone amazing. They dont have the competition for the superstars like where my brother works so its a very linear path...no one makes huge jumps unless their dad runs the company.