3.3v to 5v conversion with non-5v tolerant part. (single npn transistor?)
A 74HC595 has the characteristics of 74HC logic families, and so has an input LOW maximum of 1.0V, and an input HIGH minimum of 3.5V.

So the circuit does need a signal level shifter to drive the 74HC595 inputs from a 3.3V GPIO.

However 74HCT will register a LOW at 0.8V, and a HIGH at 2.0V.

See table "Characteristics of Selected 7400 Series Families" at Wikipedia 7400 series for the signal thresholds.

A 74HCT595 would also run at 5V. Assuming your 3.3V device is CMOS, it will drive its GPIO outputs close to the power rails, about 0.6V LOW and 2.7V HIGH for modest current, so it has some headroom.

If you need to drive several inputs of the 74xx595 shift register, then the 74HCT595 would save a set of signal level shifting components.

If the extra cost of the 74HCT595 is an issue, you could use the fact that 74HCTxx logic inputs would work with your 3.3V while the outputs would drive a 74HC595. Effectively use 74HCTxx logic as a level shifter.

So, for example, a 74HCT04 hex inverter could be used to level shift 6 signals, which might be enough to interface to several 74HC595 shift registers. Hence, 6 sets of signal level shifting components could be replaced with a 74HCT04 plus a decoupling capacitor.