Not sure if this will work for you, but with some limitations, here is a line that does what you need.
awk '{if ((NR%2-1)==0) {line=sprintf("%-30s",$0)} else {print line ":" $0}}' | \ sort --key=1,30 | tr ':' '\n'
Assumptions: there are no empty lines between entries, the name is always less than 30 characters, and the text does not use :
I am sure that you can understand how to change it if the assumptions are different.
In a nutshell, it concatenates two lines, using ':' as a separator, padding the first line up to 30 characters and sorting using the first 30 characters. Then he breaks the lines.
Alex gitelman
source share