How do you normalize a sample-by-sample processed signal?
Calculate the right audible half volumes in dB and add those?

Can't do that: dB is a logarithmic thing. Adding logarithms means multiplying the values. You want to build a linear filter, not a self-intermodulation generator, don't you?
If your filter coefficients are really just [1 1], well, then multiplying by 0.5 exactly retains your original signal power for low-frequency signals. Since this is a low-pass filter, of course higher frequencies than DC are attenuated, which is not a fault of the 0.5, but exactly the result of your filtering.
A usual way to avoid clipping that only happens rarely  would be a soft-clip function that lets through any &quot;benign&quot; amplitudes and starts saturating &quot;softly&quot; towards the maximum amplitudes.
If you want to do something more &quot;time-smooth&quot;, that would for example be an adaptive gain control (AGC), which reduces gain gradually as your signal works towards higher peaks. However, that's not a &quot;sample-by-sample&quot; thing, but something with at the very least memory (and often even implemented in a somewhat acausal manner).