Here is a proof of concept in BibLaTeX (Edited to include links and pageref in the list of names)
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{filecontents}
\usepackage{hyperref} % to activate hyperlinks
\usepackage[sorting=affiliation,backref=]{biblatex} % persons are sorted on their affiliation
%\usepackage[sorting=first,backref]{biblatex}% persons are sorted on their first name
%\usepackage[sorting=last,backref]{biblatex} % persons are sorted on their last name
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelEntrytypes{person}
\DeclareDatamodelFields[type=list,datatype=name,skipout=false]{name}
\DeclareDatamodelFields[type=field,datatype=literal,skipout=false]{affiliation,mysortkey}
\DeclareDatamodelEntryfields[person]{name,affiliation,mysortkey}
\end{filecontents}
\begin{filecontents}{\jobname.bib}
% Encoding: UTF8
@person{goedel,
name = {Gödel, Kurt},
affiliation = {Princeton}
}
@person{lamport,
name = {Lamport, Leslie},
affiliation = {Microsoft}
}
@person{knuth,
name = {Knuth, Donald},
affiliation = {Stanford}
}
\end{filecontents}
\DeclareFieldFormat{affiliation}{#1}
\DeclareBibliographyDriver{person}{
\printnames{name}
\setunit{\addcomma\addspace}
\printfield{affiliation}
\usebibmacro{pageref}
}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=name, final]
\step[fieldset=mysortkey, origfieldval]
\step[fieldsource=mysortkey,
match=\regexp{\s*(.+)\s*,\s*(.+)\s*},
replace={$2$1}]
}
}
}
\DeclareSortingScheme{affiliation}{
\sort{
\field{affiliation}
}
}
\DeclareSortingScheme{last}{
\sort{
\field{name}
}
}
\DefineBibliographyStrings{english}{
backrefpage = {p\adddot},
backrefpages = {pp\adddot},
}
\DeclareSortingScheme{first}{
\sort{
\field{mysortkey}
}
}
\DeclareCiteCommand{\person}
{\printfield{postnote}}
{\setunit{\addspace}\bibhyerref{\printnames{name}}}
{, }
{}
\addbibresource{\jobname.bib}
\begin{document}
\person{knuth}
\newpage
This is page \thepage
\person{goedel} proved the incompleteness theorem.
The inventor of \TeX{} is \person[Prof.]{knuth}
The \LaTeX{} format was written by \person{lamport}
\printbibliography[title={List of Names}]
\end{document}

The first step is to create a data model for the "registry of names".
\DeclareDatamodelEntrytypes{person}
\DeclareDatamodelFields[type=list,datatype=name,skipout=false]{name}
\DeclareDatamodelFields[type=field,datatype=literal,skipout=false]{affiliation,mysortkey}
\DeclareDatamodelEntryfields[person]{name,affiliation,mysortkey}
For the data model we create a new entry type person whose fields are name, affiliation and the mysortkey. The data model must resides in a datamodel file or a configuration file.
The second step is to create a bibliography driver for person and formatting instructions for the new fields:
\DeclareFieldFormat{affiliation}{#1}
\DeclareBibliographyDriver{person}{
\printnames{name}
\setunit{\addcomma\addspace}
\printfield{affiliation}
\usebibmacro{pageref}
}
The third step is to create sorting instructions, for affiliation and last name, this is can be done by simple sorting schemes
\DeclareSortingScheme{affiliation}{
\sort{
\field{affiliation}
}
}
\DeclareSortingScheme{last}{
\sort{
\field{name}
}
}
For sorting based on the first name we have manipulate the names (maybe Biber and BibLaTeX have better way to do it, but I was not able to find it in the documentation):
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=name, final]
\step[fieldset=mysortkey, origfieldval]
\step[fieldsource=mysortkey,
match=\regexp{\s*(.+)\s*,\s*(.+)\s*},
replace={$2$1}]
}
}
}
We can use the Biber feature to dynamically manipulated bib entries to create new fields and new values for them. Here we duplicate the value of name and transform its content (when in standard BibTeX format <last>, <first> to create the string <first><last> in the mysortkey field. After this step we can use a simple sorting schema
\DeclareSortingScheme{first}{
\sort{
\field{mysortkey}
}
}
The final step is to create a citation command \person
\DeclareCiteCommand{\person}
{\printfield{postnote}}
{\setunit{\addspace}\bibhyperref{\printnames{name}}}
{, }
{}
You need BibLaTex > 2.0 and biber > 1.2. This example will work in TeXLive2012
EDIT
To print only the initials in the text, the first step is to create a new formatting directive for names, namely:
\DeclareNameFormat{firstinit}{\usebibmacro{name:first-last}{#1}{#4}{#5}{#7}}
then, the new formatting directive has to be used (as a format option in the definition of the command for the citation, i.e., \person:
\DeclareCiteCommand{\person}
{\printfield{postnote}}
{\setunit{\addspace}\bibhyperref{\printnames[firstinit]{name}}}
{, }
{}
nameauthpackage in a previous incarnation of your question. There may be different solutions. – Nov 25 '12 at 08:28