I have not used arrays in my structures; but I don’t see anything wrong with your original structure. Do you still need the padding if you just use 2 matrices not as an array?
That being said, in general, the reason for you to assign block bindings in the shader is if you have some convention, so that your source code automatically knows where these bindings are. Say, your projection matrix is always in binding point 0, your array of matrices for skinning is always in binding 1, etc.
That’s pretty much what I am doing, it’s for a bunch of tests with some shared UBOs and it’s easier than setting the binding point each time, though that isn’t a big undertaking in itself.
I should try and see if I can still manually bind the uniform block to the right location.