I don't see anything wrong with the OP's method.
Another option is to roll two dice each level, and literally take the average of them. It sounds odd, but the math is pretty close. Take the cleric rolling d8. You can simulate a d4 by halving a d8 and rounding up. Do that twice and call it a day. That actually gives 3/64 (8, 8; 7, 8; 8, 7) chance of an 8 and only 1/64 of a 2 (1, 1). I'm not going to check the math on the rest of the curve.
If you want to up the average while retaining an even distribution, you could roll the next smaller die and add 2 to the result. The above Cleric has a range of 3-8 hp, with a flat distribution. If the desire is to eliminate the extremes, add just 1 instead of 2. The Cleric now has a range of 2-7.
If you want a bell curve that centers high, do both: roll two dice of the next size down, halve that, and add 2. The Cleric gets 2d6/2 + 2 for a range of 4-8 and an average of just above 5.5 (functionally 6). Really, though, all classes average around 75% of their hit points (d4=>5, d8=>6, d10=>8, d12=>9) with a minimum of 3 and the same maximum they have, now. A small tweak can scale the minimum, too.