Discussion time! :-)
1) Like I said, you never do any kind of database operations on the image itself, only on information related to the image, so there is absolutely no need to store the image itself in the database.
2) Fast but still not as fast as direct filesystem access. Try sticking 200 images of 100k each in a MySQL table and see how fast it is 🙂
The point is, you can't directly acces an image in a database.
What happens is that you first lookup which image you want.
Then in the client's page you print a link to a php script that can fetch the image.
The clients browser calls that script, your server runs the script,
requests the data from the database server, who then does a search and returns the image data to the php script, which will then send it on to the browser.
In the other scenario you lookup which image you want, and print a link to the image in the clients page.
The client browser requests the image from your webserver, who opens the image and sends it to the client.
See the difference? :-)
3) It's easier to understand, but I wouldn't call it tidy just yet. Don't forget you need extra routines to upload images into the database and extra scripts to get them back out. You can't use normal filesystem commands to get them in, and you can use normal HTTP to get them out.