What we did for a client is override the action a link to a userprofile has by using a control override (delegatecontrol). You could have the link redirect to a custom Contacts list in your site that holds all your users and then add extra properties to that list.
Feature / Elements xml:
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Control Id="ProfileRedirection" Sequence="90" ControlClass="CLASSNAME" ControlAssembly="ASSEMBLYNAME" />
</Elements>
Control class code:
using System;
using System.Globalization;
using System.Security.Permissions;
using System.Web.UI;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebControls;
namespace Intratuin.IntraWeb.WebControls.Profile
{
public class ProfileRedirect : UserControl, IFormDelegateControlSource
{
[SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
public void OnFormInit(object objOfInterest)
{
var user = objOfInterest as SPListItem;
if (user != null)
{
RedirectIfNecessary(user);
}
}
[SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
public void OnFormSave(object objOfInterest)
{
}
private void RedirectIfNecessary(SPItem user)
{
SPUtility.Redirect("DispFormOfYourContactsList", SPRedirectFlags.Default, Context, string.Format(CultureInfo.InvariantCulture, "id={0}", user["ID"])); //This is Case Sensitive
}
}
}