Both answers are correct.
First note that the following regular expression works:
$$a^*aaba^*+a^*abaa^*+a^*baaa^*\;.$$
The first term catches every word of $L$ that has a pair of $a$s anywhere after the $b$, the second catches every word that has the $b$ between two $a$s, and the third catches every word that has two $a$s anywhere after the $b$. Of course, many words are caught by more than one term, but that’s perfectly all right. It doesn’t matter that I specify that the two $a$s are together: in any string of two or more $a$s, there are two that are adjacent, and I can always choose them to be the first two or the last two.
Your answer is simply an inefficient version of this one. Your $a^*aa^*aa^*ba^*$ is exactly equivalent to $a^*aaba^*$, both generating every string that has at least two $a$s before the $b$. Similarly, your $a^*aa^*ba^*aa^*$ is equivalent to $a^*abaa^*$, both generating every string that has at least one $a$ on each side of the $b$. And your third term is similarly equivalent to mine.
This can be simplified if we observe that either the $b$ comes first, in which case we must have $baaa^*$, or it comes last, in which case we must have $a^*aab$, or it comes between two $a$s, in which case we must have $a^*abaa^*$. Thus, the expression
$$baaa^*+a^*abaa^*+a^*aab$$
will work just fine.
Your professor simplified it a little differently. First, $aaa^*ba^*$ catches every word of $L$ that has at least two $a$s before the $b$. If a word of $L$ does not have two $a$s before the $b$, then either it starts $aba$, in which case it’s caught by $abaa^*$, or it starts $baa$, in which case it’s caught by $baaa^*$.