1) About accessing some data more frequently than others: there is hardly any speed difference between fetching from a 4 column table and a 40 column table, unless those columns contain BLOB fields (ie: they are VERY large)
About using multiple tables for clarity: Valid point, storing data that is 'very' different in seperate tables can be a good thing. It really depends on how different the nature of the data is.
Remember that every time you split data up, you are going to have to merge it lateron, so don't be too split-happy.
2) Good point.
Many people use access-rights at PHP level. We logon to a PHP page, and depending on some variable we can do certain things.
That's cool, but not fullproof. Most of us have an account on our MySQL
server that has 'root' rights on the database, so it can do everything (create/drop/select/insert etc).
Sounds ok, but it's not. The account used by your script should not have any more privileges than it needs. That way, if you accidently F-up, and put a 'drop database' in a query, the database will refuse to execute the query because the account you used did not have the privileges to do it. Instant failsafe.