Well, here's my thoughts, take them or leave them.

"Mbro" doesn't work (in our perceptions) due to the (generally true) idea that consonants don't soundly follow consonants in sequences of 3, as you'd basically stated. 2 consonants next to each other, maybe. Really, this is only consonant SOUNDS. Same kind of works for vowels. That's why the word "queuing" looks so weird spelled out.

Combinatorics knowledge is ESSENTIAL for this kind of process. I'm going to start this from the ground up because I'm not sure if we're on the same page as to how this is calculated.

For any sequence of non-repeating letters, the amount of valid combinations is factorial n, where n is the number of letters. Mathematically, this is:

n!

No joke, there is an exclamation point there.

For n=5, n!=5*4*3*2*1. So, for any five non-repeating items, there are 120 possible combinations.

What about repeats? Well, we know that with ABC, there are 3*2*1, or 6 valid combinations. If we only take two letters, there are 3*2, or, yes, still, 6 combinations. However, we know AAA only produces 1 unique combination. Why? Since there is a repeating item, we have to add the factorial of the number of repeats. Since all are repeats, we solve for:

3! / 3!

Or

3*2*1/3*2*1.

That's just so you know that the word "STATISTICS" or somesuch returns significantly fewer due to its repeated instances of S,I, and T.

These are only UNIQUE combinations. If we allow items to repeat (chocolate, vanilla, strawberry- type problems where chocolate-chocolate-chocolate is valid (yum!

)), we just use 3*3*3 (there are 27 different triple-scoop orders, although many of them are just stacked differently.)

How does this apply to your problem? Well, from what I've observed, people are only looking at the lower bound, that is, regardless of the sophistication of your system, the believability is based on how much you allow the massive possible permutations under the limited system.

So honestly? Cheating with sequences like:

1st: "Sha" or "Cha" or "Ram" or "Vla"

2nd: "on" or "one" or "no" or "ni" or "in" or "lyn"

Bounds: 4*6-24 for this name sequence

Is perfectly okay. Just create a couple different sound types that you can reliably expect to fit together (crunch all of them if you'd like, put them on a list, look for any outliers. It's just a bunch of FOR-NEXT loops, as I try to explain to non-coders in real-life scenarios

)

Another idea, useful for your length problem, is what I call critical boundary thinking, based on the World Of Darkness tabletop roleplaying game. Essentially, the logic behind the dice rolls allowed for infinite success. How? Well, every roll on the 10 sided die that was above 8 let you roll again. So with 7 rolls, you had a constantly decaying chance but, yes, you could theoretically continue rolling forever so long as it always hit 8 or above.

What I'm saying is, if you allow consonants to repeat, make successive repetitions have a lower and lower chance, and THEN write the upper bound if it seems necessary.

Look at the lengths of this test:

DO
CLS
FOR x=1 TO 10
s$="A" // Or minimum 1 sound
t=RND(20)
WHILE t>15
t=RND(20)
s$=s$+"A"
ENDWHILE
PRINT s$
NEXT x
FOR x=1 TO 10
s$="BBB" // Or minimum 3 sounds
t=RND(20)
WHILE t>12
t=RND(20)
s$=s$+"B"
ENDWHILE
PRINT s$
NEXT x
WAIT KEY
LOOP
END

I don't know how the probability decays offhand, but it's slow, steady, and a particularly easy way to write a generator. It doesn't have an upward cap, but it hardly NEEDS one. It reflects real life fairly well: Shorter names with increased rarity over longer, very long names with the lowest.

Also, odds-making logic helps in generators of any kind where bias is involved.

So you want every English letter to appear but "s", "c", and "t" to be favored? Well, what I would do is just create an array with one instance of every valid sound, but with repeats of the favored sounds. then roll against the table. Then, the relative "weight" of any can be adjusted.

I hope I didn't ramble. I kinda rambled. I hope something in my rambling helped. I'm going to go write a generator now XD

EDIT: I attached a simple generator I cooked up, source and all. To increase weight or change sounds, just modify the .ini that comes with it. Gah, I don't like doing combinatorics again. :\ BUT ITS SOOOO FUUUUUUNN...