Fields are naturally trimmed of white space when stored to the database. As such, you can't include a space at the beginning or end of a label. There's a few silly tricks, such as using the non-printable-character "" (character code 127), but as you can see, it appears as a double-width space, so it's not always practical. It may also show up as something else other than white space on some fonts (e.g. it might look like "□" or "�" on some systems). It's much better to use white space later. One trick you can use to help you out here is to use String.join instead:
String output = String.join(
new String[] { Label.MyLabel1, 'some other dynamic string', Label.MyLabel2 }, ' ');
This may be particularly useful when you don't know how many strings you'll be joining together. You could also use String.format:
String output = String.format(
'{0} some other dynamic string {1}',
new String[] { Label.MyLabel1, Label.MyLabel2 });
This lets you format the string precisely with positional placeholders, and is useful when you do know how many parameters you have. It is a little more verbose, but you get extra flexibility. You could even use the format string as another label:
String output = String.format(
Label.FormattedText,
new String[] { Label.MyLabel1, Label.MyLabel2 });
Note that this last example is particularly useful, because this lets you translate the formatting in to different languages. For example, some languages you might end up writing "{1} ... {0}", effectively swapping the two labels around, because of the difference in sentence structure. Some languages, like German, have different rules for spacing, too, so you might not want the extra spaces to be hard-coded in a string.