Essentially, the solution involves using a separate xsl file with the desired rendering (including the link) for the document icons. This requires one-time implementation and the solution file should not be touched by any patches/upgrades. The following are the key points to note about this solution:
The solution is based on the fldtypes extensibility available in SharePoint 2010. This has been documented in the following link:
The solution does not involve administrative overhead after the initial implementation. In addition, it should not be affected by the application of future updates and service packs to the SharePoint 2010 environment.
1. Create a text file using Notepad and copy the following XSLT code into the file.
2. Save the file as fldtypes_docicon.xsl and copy it into the Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\layouts\XSL folder on your WFEs.
3. Reset IIS and browse to the SharePoint site.
<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal" ddwrt:oob="true">
<xsl:output method="html" indent="no"/>
<xsl:template ddwrt:dvt_mode="body" match ="FieldRef[@Name='DocIcon']" mode="Computed_DocIcon_body">
<xsl:param name="thisNode" select="."/>
<xsl:param name="folderUrlAdditionalQueryString" select="''"/>
<xsl:choose>
<xsl:when test="$thisNode/@FSObjType='1'">
<xsl:variable name="alttext">
<xsl:choose>
<xsl:when test="starts-with($thisNode/@ContentTypeId, "0x0120D5")">
<xsl:value-of select="$thisNode/../@itemname_documentset"/>: <xsl:value-of select="$thisNode/@FileLeafRef"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$thisNode/../@listformtitle_folder"/>: <xsl:value-of select="$thisNode/@FileLeafRef"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="mapico" select="$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico"/>
<xsl:variable name="folderIconPath">
<xsl:call-template name="GetFolderIconSourcePath">
<xsl:with-param name="thisNode" select="$thisNode"/>
</xsl:call-template>
</xsl:variable>
<!-- This is a folder -->
<xsl:choose>
<xsl:when test="$RecursiveView='1'">
<img border="0" alt="{$alttext}" src="{$folderIconPath}" />
<xsl:choose>
<xsl:when test="$thisNode/@IconOverlay != ''">
<img src="/_layouts/images/{$thisNode/@IconOverlay.mapoly}" class="ms-vb-icon-overlay" alt="" title="" />
</xsl:when>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="FolderCTID">
<xsl:value-of select="$PagePathFinal" />RootFolder=<xsl:value-of select="$thisNode/@FileRef.urlencode" /><xsl:value-of select="$ShowWebPart"/>&FolderCTID=<xsl:value-of select="$thisNode/@ContentTypeId" />&View=<xsl:value-of select="$View"/><xsl:value-of select="$folderUrlAdditionalQueryString"/>
</xsl:variable>
<a href="{$FolderCTID}" onmousedown ="VerifyFolderHref(this, event, '{$thisNode/@File_x0020_Type.url}','{$thisNode/@File_x0020_Type.progid}','{$XmlDefinition/List/@DefaultItemOpen}', '{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}', '{$thisNode/@HTML_x0020_File_x0020_Type}', '{$thisNode/@serverurl.progid}')"
onclick="return HandleFolder(this,event,"{$PagePathFinal}RootFolder=" + escapeProperly("{$thisNode/@FileRef}") + '{$ShowWebPart}&FolderCTID={$thisNode/@ContentTypeId}&View={$View}{$folderUrlAdditionalQueryString}','TRUE','FALSE','{$thisNode/@File_x0020_Type.url}','{$thisNode/@File_x0020_Type.progid}','{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@HTML_x0020_File_x0020_Type}','{$thisNode/@serverurl.progid}','{$thisNode/@CheckoutUser.id}','{$Userid}','{$XmlDefinition/List/@ForceCheckout}','{$thisNode/@IsCheckedoutToLocal}','{$thisNode/@PermMask}');">
<img border="0" alt="{$alttext}" title="{$alttext}" src="{$folderIconPath}" />
<xsl:choose>
<xsl:when test="$thisNode/@IconOverlay != ''">
<img src="/_layouts/images/{$thisNode/@IconOverlay.mapoly}" class="ms-vb-icon-overlay" alt="" title="" />
</xsl:when>
</xsl:choose>
</a>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$IsDocLib">
<a onfocus="OnLink(this)" href="{$thisNode/@FileRef}" onmousedown="return VerifyHref(this,event,'{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@serverurl.progid}')"
onclick="return DispEx(this,event,'TRUE','FALSE','{$thisNode/@File_x0020_Type.url}','{$thisNode/@File_x0020_Type.progid}','{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@HTML_x0020_File_x0020_Type}','{$thisNode/@serverurl.progid}','{$thisNode/@CheckoutUser.id}','{$Userid}','{$XmlDefinition/List/@ForceCheckout}','{$thisNode/@IsCheckedoutToLocal}','{$thisNode/@PermMask}')">
<xsl:choose>
<xsl:when test="not ($thisNode/@IconOverlay) or $thisNode/@IconOverlay =''">
<xsl:choose>
<xsl:when test="not ($thisNode/@CheckoutUser.id) or $thisNode/@CheckoutUser.id =''">
<img border="0" alt="{$thisNode/@FileLeafRef}" title="{$thisNode/@FileLeafRef}" src="/_layouts/images/{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico}"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="alttext"><xsl:value-of select="$thisNode/@FileLeafRef"/><xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes"> </xsl:text><xsl:value-of select="$thisNode/../@managecheckedoutfiles_header_checkedoutby"/>: <xsl:value-of select="$thisNode/@CheckoutUser.title"/></xsl:variable>
<img border="0" alt="{$alttext}" title="{$alttext}" src="/_layouts/images/{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico}" />
<img src="/_layouts/images/checkoutoverlay.gif" class="ms-vb-icon-overlay" alt="{$alttext}" title="{$alttext}" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise >
<img border="0" alt="{$thisNode/@FileLeafRef}" title="{$thisNode/@FileLeafRef}" src="/_layouts/images/{$thisNode/@IconOverlay.mapico}" />
<img src="/_layouts/images/{$thisNode/@IconOverlay.mapoly}" class="ms-vb-icon-overlay" alt="" title="" />
</xsl:otherwise>
</xsl:choose>
</a>
</xsl:when>
<xsl:otherwise>
<img border="0" src="/_layouts/images/{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico}">
<xsl:attribute name="alt">
<xsl:value-of select="$thisNode/@Title"/>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="$thisNode/@Title"/>
</xsl:attribute>
</img>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>