Criterion to choose length of an accumulator and product
Fixed point processing is very difficult. Floating point is A LOT easier. 
The best algorithm and scaling approach depends a lot on your specific filter and the statistics of your signal. There is no "one size fits all" solution.
Cascaded second order sections are almost always the way to go. Primarily they guarantee that your coefficients values are bounded to something reasonable (2 or less). With transfer function implementation the coefficients tend to get really large or really small wich generates a lot of noise or scaling problems.
Within each section, use either Direct Form I or Transposed Form II. This helps controlling the scaling of the state variables and intermediate result
The best way to approach this to use "Q notation" https://en.wikipedia.org/wiki/Q_(number_format) to determine for EVERY SINGLE operation, which bits to use for what purpose. Doing this analysis will determine which bits to compute and which bits to keep (using multiplies, shifts, adds and masks).
Sometimes you need to treat this as a statistical problem. In many cases doing conservative scaling results in very poor signal to noise ratio, so you need to trade off the probability of clipping versus your steady state signal to noise. That's highly dependent on your signal, the specific filter and the requirements of your application.
You also need to carefully control your clipping and rounding behavior to avoid wrap-arounds and limit cycles.