1 and 2 - there are very small difference between release and debug: optimizations are turned on (see what it means by Eric Lippert ) and there is no DEBUG defined for release build.
The easiest way to learn yourself how two configurations are different is to create basic project and compare configuration sections for debug and release.
Debug: Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
Release: Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
There is also difference in debug information type, but it mainly impact convenience of debugging.
3 - there is nothing else that is generic for all types of solution to improve performance. Each type of solutions have ways to tweak performance - correct logging configuration, options to compile related files in ASPX, NGen to pre-JIT, picking x86/x64... Basically you need to start doing regular performance work - set goals, measure, tweak/optimize.