Boa Tarde Balarini,
Acredito que o link abaixo já pode ser bem interessante:
10 Dicas para Projetar, Construir e Implantar Aplicações Web Mais Seguras
http://www.microsoft.com/brasil/technet/Seguranca/colunas/dica0905.mspx
Sobre as perguntas, vou colocar minha percepção:
A divisão em camadas é interessante para permitir a escalabilidade e manutenção do seu projeto. Se você o divide em camadas, você pode colocar essas camadas em servidor distintos e escalar sua aplicação. Se você não divide sua aplicação em camadas, tudo tenderá a rodar na mesma máquina e a escalabilidade ficará mais comprometida. A introdução de camadas, pode implicar em queda de desempenho, uma vez que você estará empilhando camadas, mas não acho que seja um mau negócio. Dividir em camadas é bem mais vantajoso.
O uso de stored procedures tende a melhorar o desempenho por conta do plano pré-compilado e da diminuição de tráfego de rede. Em todo caso, não abuse desse recurso colocando tudo em stored procedures, pois, você pode acabar tornando o banco um grande gargalo. Envio de e-mail, cálculos estatísticos, formatação de relatórios, etc são fortes candidatos a não estarem em stored procedures
Se sua aplicação for Web, tende usufruir de recursos de cachê de dados, Ajax, etc.
[ ]s,
Gustavo