Is there any algorithm which takes regular expression as input and finds if the regular language which expression describes is infinite?
Yes, there is such an algorithm, and (if I am not mistaken) you can actually use a recursive evaluation of regular expressions.

Recall that regular expressions are composed from $\varnothing$, $\varepsilon$ and $a$ (for $a$ in some alphabet) using the operations $\cdot$, $+$ and $*$ (concatenation, union and iteration).

Observe that a language can only be infinite if it is based on the iteration of any language that contains a string that is not empty ($\varepsilon$). Then such an iteration can be repeatedly concatenated and unioned with other languages.   The result will be infinite again, except in the case we concatenate with the empty set.

Now introduce language 'classes' NUL, ONE, FIN, and INF for the empty set, the empty string, any (finite) language that contains a string other than $\varepsilon$, and any infinite set.

Start by replacing in your regular expression any occurrence of $\varnothing$, $\varepsilon$ and $a$ by NUL, ONE and FIN respectively.

Now use a set of reductions (equalities) on the new expression, and repeat those:


NUL* = ONE* = ONE
NUL + FIN = ONE + FIN = FIN + FIN = FIN
NUL NUL = NUL ONE = NUL FIN = NUL INF = NUL 
ONE FIN = FIN FIN =  FIN
ONE INF = FIN INF = INF INF = INF
FIN* = INF* = INF


And many more, try to find what is needed.  

And it seems to solve the empty set problem at the same time?