After reading the answer of Kent and use his example using seq
I found the problem was my program.
My program behave as a deamon so the last pipe for the last redirection was not forked as the first one and so did nothing until the end of the program.
So I already had the right solution, using 2 named pipes for the 2 redirections:
./prog | tee >(grep -i 'grep1' > file1) >(grep -i 'grep2' > file2)