To that end I'm playing with automating the mysql_upgrade step in the RPM itself and now would be a good time for outside vetting before this becomes permanent. The following is the proposed design:
The %post install event (this is a script action that occurs after the upgrade happens) will:
1) stop mysql
2) manually restart mysql with "skip-grant tables". This disables password authentication.
3)run mysql_upgrade (no passwords required)
4) dump any tables that cannot be repaired in this step to /tmp/mysql_optimize.sql (this is required for innodb tables)
5) restart, again with skip-grant tables
6) import the mysql_optimize.sql
7) stop mysql

That is a lot of moving parts there, and a lot of places where this can go wrong. Also I can see that some people would never want to go through this on a live server (the dump and import could take a very long time) so that end, I'm proposing a standard environmental variable that will allow you to skip actions like this by setting:
export ATOMIC_SKIP=1
before you run the upgrade (rpm -U or yum upgrade)
Some caveats to this approach, the %post routine is triggered on Update events only for obvious reasons. However there is no way to say "only run this if its mysql 5.0 -> 5.5" Its always going to be there, and would run from 5.5.15 to 5.5.16 as long as ATOMIC_SKIP is not set. Also you can not, in any way shape or form, make an rpm interactive. It cant prompt you, and it shouldnt even echo anything back to the user like other packagers do (ie: plesk), hence the use of a silent environmental variable for controlling this.
A test implementation of this is available now for el5 environments in the atomic-testing channel in version 5.5.15-2.