ad1. Zależy od menu. Jeśli masz je w miarę stałe (kategorie i podkategorie modyfikujesz niezwykle rzadko), to lepiej ująć je albo od razu w kodzie widoku, albo jako plik, gdzie masz strukturę tego menu zapisaną (tablica, xml). Na pewno jest to optymalniejsze niż robić dodatkowe zapytanie do bazy. Tak więc mmica "baza zawsze lepsza" to złe podejście. Wiele razy lepiej coś pchnąć do pliku, do którego dostęp jest przecież szybszy, ewentualnie wrzucić to do cache'u.
ad2. Strony dzielisz tak, by były one odpowiedzialne za określone fragmenty/elementy. Dla nich tworzysz odpowiednie widoki i tyle. W przypadku jaki rzuciłeś można całość rozwiązać zależnie od tego co masz pokazać
po wciśnięciu wyślij. Jeśli nadal formularz, ale uzupełniony i przygotowany do ewentualnych poprawek, to lepiej trzymać się nadal tego samego i jedynie od zawartości $POST uzależniać dodatkowe elementy wyświetlane. Jeśli masz przekierowanie na już istniejące strony to tam musisz ująć jak poradzić sobie z komunikatami. Ale możesz też mieć stronę dedykowana dla komunikatów. Co programista to może mieć inny pomysł na to. I dlatego programowanie to na swój sposób sztuka. Niektórzy chałturzą byle zrobić, inni to rzemieślnicy, którym powierzyłbyś pracę bo wiesz, że są solidni, a jeszcze inni to artyści, których niekoniecznie musisz rozumieć, bo mają swoją wizję i to oni najczęściej wyznaczają kierunki rozwoju

ad3. Jeśli coś się zaczyna Ci powtarzać, znaczy że nie przewidziałeś tego i powinieneś coś uprościć lub przebudować tak, by przestało się powtarzać. Jak już wspomniano -> Don't Repeat Yourself. Jak? Rozłóż stronę na "widoki pierwsze". Wydziel pewien niezmienny szablon i w niego wkładaj pomniejsze jako cegiełki. W ten sposób unikniesz powtarzania wciąż tego samego.
ad4. Wiąże się z ad3. Jeśli dane się powtarzają to znaczy, że prawdopodobnie źle zaprojektowałeś bazę. Nie tyczy tego tylko jedna sytuacja - gdy świadomie dublujesz dane by zwiększyć wydajność. Ale do tego trzeba wiedzieć kiedy takie coś powinno się stosować i mieć świadomość, że dane te wymagają synchronizacji - muszą być w obu miejscach bowiem identyczne!