Uhm...there could be a little difference, but should not be such the one you reported. You have to understand that given a completed query allows the optimizer to choose in advance the right/best plan, giving a prepared statement makes the optimizer to guess and to rebuild the plan once the values are known.
You can test the same prepared query from the console too, and see if the problem persist.
Anyway, take into account that testing the same query over and over again is a bad idea: the database will cache data and the execution of the same query will result faster.
Finally, you can enable verbose logging to see which plan the database choose and compare it against the complete query.