You just have to check the rank of the matrix.
When you look a discrete signals, it is customary to express their product the following way. If vectors are considered "column-wise", then you typically use the transpose operation:
$$ x[n_1,n_2] = f[n_1]^T g[n_2]$$
This implies that the 2D signal is of rank one or less (rank being the maximal number of linearly independent rows or columns). Conversely, any (infinite) matrix of rank $0$ or $1$ is separable. Note: the separation is not unique in general.