You actually have a lot of options for this, beyond building something custom.
First, you can use a structured content solution like OpenContent or 2sxc to "build" it using their UI (or code too for advanced stuff).
If you want something that can mostly work out of the box, then I'd suggest using a "help desk" kind of module, like Live HelpDesk or my Help Desk. (I didn't know about the latter one until today, from this forum post.)