Err sorry, your not just selecting one row, and I'm sure you started with the permission_p function anyway. It was the morning after the night before and I shouldn't have been typing...
I would expect that even with the function call overhead permission_p would still perform better for small numbers of rows returned. Did you notice a big difference? It would be good to work out some guide lines for when to use the simple permission_p and when to go with inline SQL, and how.