How to further expand $\text{grad} \left( \vec{a} \cdot\vec{b} \right ) = \vec{\nabla} \left (\vec{a} \cdot\vec{b} \right )$? With $\vec{a}, \vec{b}: \mathbb{R}^3 \to \mathbb{R}^3$ vector fields:
I want to expand $\text{grad} \left( \vec{a} \cdot \vec{b} \right ) = \vec{\nabla} \left (\vec{a} \cdot \vec{b} \right )$.
So I started with:
$\left [\vec{\nabla}\left (\vec{a} \cdot \vec{b} \right )  \right ]_i = \partial_i\left (a_j b_j \right ) \overset{\text{Product rule}}{=} \left ( \partial_i a_j \right ) b_j + a_j \left( \partial_i b_j \right )$
But where to go from there? In the end I'm supposed to arrive at:
$\text{grad} \left( \vec{a} \cdot \vec{b} \right ) =\vec{a} \times \left(\vec{\nabla} \times \vec{b}\right) + \vec{b} \times \left(\vec{\nabla} \times \vec{a}\right) + \left(\vec{b} \cdot\vec{\nabla}\right) \vec{a} + \left(\vec{a} \cdot\vec{\nabla} \right) \vec{b}$
 A: 
So I started with:
$\left [\vec{\nabla}\left (\vec{a} \cdot \vec{b} \right )  \right ]_i = \partial_i\left (a_j b_j \right ) \overset{\text{Product rule}}{=} \left ( \partial_i a_j \right ) b_j + a_j \left( \partial_i b_j \right )$
But where to go from there?

Why do you feel the need to "go" anywhere from there? That's a perfectly acceptable answer.

I think, in the end I should arrive at:
$\vec{a} \times \left(\vec{\nabla} \times \vec{b}\right) + \vec{b} \times \left(\vec{\nabla} \times \vec{a}\right) + \left(\vec{b} \cdot\vec{\nabla}\right) \cdot\vec{a} + \left(\vec{a} \cdot\vec{\nabla} \right) \cdot\vec{b}$

If you have some external reason to conclude that this form is, because of your particular circumstances, more useful than anything else, then to prove that
$$
\vec{\nabla}\left (\vec{a} \cdot \vec{b} \right ) 
=
\vec{a} \times \left(\vec{\nabla} \times \vec{b}\right) 
+ \vec{b} \times \left(\vec{\nabla} \times \vec{a}\right) 
+ \left(\vec{b} \cdot\vec{\nabla}\right) \cdot\vec{a} 
+ \left(\vec{a} \cdot\vec{\nabla} \right) \cdot\vec{b}
\tag 1
$$
the simplest way is to start with the right-hand side and show that it reduces to the component identity that you've already found,
$$
\vec{\nabla}\left (\vec{a} \cdot \vec{b} \right ) 
=
\hat e_i ( \partial_i a_j ) b_j + \hat e_i  a_j ( \partial_i b_j ).
\tag 2
$$
To do that, you work each term individually, so e.g.
\begin{align}
\vec{a} \times \left(\vec{\nabla} \times \vec{b}\right) 
& = 
\hat e_i \epsilon_{ijk} a_j \epsilon_{klm}\partial_l b_m
\\& = 
\epsilon_{kij}\epsilon_{klm} \hat e_i  a_j \partial_l b_m
\\& = 
(\delta_{il}\delta_{jm}-\delta_{im}\delta_{jl}) \hat e_i  a_j \partial_l b_m
\\& = 
\hat e_i  a_j \partial_i b_j - \hat e_i  a_j \partial_j b_i,
\tag 3
\end{align}
and then you work from there.
However, to be honest, I'm not sure there are any particular circumstances in which showing the identity $(1)$ is useful, other than "a textbook problem asked me to".

What do you do in the 'real' world? Well, there's a ton of different notations for $(2)$, depending on what you want to do (say, you might introduce $\nabla\vec a$ as a matrix, and then use notation like $(\nabla\vec a)\cdot \vec b $, being careful to specify how the left and right dot products of that matrix are defined in terms of the matrix indices, or you might use notation like $\nabla(\vec a\cdot \vec b) = \nabla_\vec{a}(\vec a\cdot \vec b) + \nabla_\vec b(\vec a\cdot \vec b)$ where the subscripts indicate what function the differential operator acts on, among other alternatives) but there's no one-size-fits all "best" notation for the object that you've already found. It comes down to personal preference and what fits best the requirements of the calculation you're working in.
