--- Quote Start ---
clearly IF/ELSEIF is less optimal than using CASE statement
--- Quote End ---
Why, particularly?
There's a discussion about priority encoder coding methods in the advanced synthesis cookbook.
http://www.altera.com/literature/manual/stx_cookbook.pdf In terms of synthesis efficiency, there seems to be a problem of the Quartus synthesis tool (and probably others too) to utilize the carry chain for non-arithmetical problems. The synthesis cookbook overcomes it by utilizing an adder for the first step of a priority encoder, the priority masking.
Without this problems, we would expect that functional equivalent descriptions of the priority encoder synthesize to the same logic (e.g. case or if elseif), but unfortunately it's not the case. A straightforward behavioral description of the priority encoder can be written as a for loop.
You should also check the results of the altpriority_encoder MegaFunction for comparison.