#2 is the easiest, so I will answer that first: object_name(object_id [, dbid]).....you have both components in monProcessStatement (ProcedureID, DBID)
#1 is a bit tougher. If all you need is wall clock time, dbisql will give you that in the messages window - and isql has an option to do so as well (isql -p ....I believe...ASE utility guide in doc set will say for sure). Otherwise you are confusing a few concepts:
1 - monProcessStatement contains the *currently* executing statement - which, for a stored procedure would be the currently executing line number. The StartTime for that current statement is in monProcessStatement. As soon as it finishes, the data is flushed to monSysStatement (the historical pipe variant). If you want the entire procedure execution time, you would have to sum the executions from monSysStatement for that SPID, KPID, DBID, ProcedureID, Context....and you would have to be quick due to pipe size....depending on activity. If the proc hasn't finished executing, you might find some interest stats in monProcessProcedures
2 - In 15.7, you can get aggregated stats for each PLAN of a proc from monCachedProcedures. Note that it will have ExecutionTime and ExecutionCount - so no way to tell what a single execution takes - but you can get an average
You might want to consider not joining with sysprocesses or even doing joins at all. First of all, if I call the proc via an RPC call, there is no SQLText.....sooo ....you might miss data you are after. Second of all, unlike monProcess, sysprocesses doesn't support arguments - therefore it is a full scan of ALL the pss structures - which on a system with a lot of users can take a bit - and since it is all in memory, it is a bunch of CPU.