The engine cannot combine multiple material instances that have different parameters.
(And for any dynamic actor, the engine has a hard time combining them anyway.)
However, “draw call” is one kind of cost. There is also the “shader switching cost” cost. When you have multiple material instances, they all re-use the same shader on the card, so it’s still faster to render a bunch of instances of the same material, than rendering a bunch of different materials where the shader switching cost is higher. Material instances also don’t need to store the additional shader code, so they save a bit of space, too.