Generally, an MLP expects to produce an output vector for every input example. I.e for every name it will produce a single gender label.
In your case you are treating every letter in the name as an input example. This is what it means to set the batch size equal to the length of a name. In this case the network expects to produce an output label for every letter in the input, which is not very helpful.
Instead, you should take your one-hot encodings and concatenate them into a single vector, then treat this as a single input example. Your network would then take a batch of names as input, and produce a batch of labels as output.
I think your confusion lies in the definition of the terms: feature, instance, batch. A feature is a single pixel or a single letter, an instance is a single name (a collection of features), while a batch is a collection of names. How you choose to represent these is up to you, but generally a feature is a scalar value, an instance is a vector, while a batch is a matrix. If you are dealing with images (and convolutional networks) then an instance is a matrix and a batch is a tensor (4 dimensions).
Hope this is helpful!
And plenty of questions is fine! Everyone has to learn at some point.